猿问

为什么来自Json的GSON抛出一个JsonSyntaxException

为什么来自Json的GSON抛出一个JsonSyntaxException

我试图将一些JSON内容反序列化为一个自定义POJO类型Gson#fromJson(String, Class).

这段代码

import com.google.gson.Gson;public class Sample {
    public static void main(String[] args) {
        String json = "{\"nestedPojo\":[{\"name\":null, \"value\":42}]}";
        Gson gson = new Gson();
        gson.fromJson(json, Pojo.class);
    }}class Pojo {
    NestedPojo nestedPojo;}class NestedPojo {
    String name;
    int value;}

抛出以下异常

Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException:
 Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 16 path $.nestedPojo
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:200)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:103)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:196)
    at com.google.gson.Gson.fromJson(Gson.java:810)
    at com.google.gson.Gson.fromJson(Gson.java:775)
    at com.google.gson.Gson.fromJson(Gson.java:724)
    at com.google.gson.Gson.fromJson(Gson.java:696)
    at com.example.Sample.main(Sample.java:23)Caused by: java.lang.IllegalStateException: 
    Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 16 path $.nestedPojo
    at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:387)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:189)
    ... 7 more

为什么gson不能正确地将我的JSON文本转换为我的POJO类型?


德玛西亚99
浏览 8392回答 2
2回答

一只名叫tom的猫

class Pojo {   NestedPojo nestedPojo;}在json中有一个nestedpojo数组,所以要么更改代码  NestedPojo[] nestedPojo;或者更改json字符串。String json = "{\"nestedPojo\":{\"name\":null, \"value\":42}}";
随时随地看视频慕课网APP

相关分类

Java
我要回答