使用GSON在对象和对象中使用相同名称进行JSON解析阵列

时间:2016-07-19 06:56:00

标签: android json parsing gson

我有json响应,我有阵列&具有相同名称的对象。我无法用GSON解析它。难道用Gson解析那种json响应吗?或者,有一些方法可以用GSON解析响应吗?

回复示例:

 {
      "content": [
                   {
                     "type": "text",
                      "content": "adnan",
                      "class": "32",
                      "align": "1"
                   },
                   {
                     "type": "image",
                     "image": "http://adnanul.jpg",
                     "width": 590,
                     "content": "sarkar",
                     "height": 332,
                     "link": "http://hashtagfail.com/post/44606137082/mobile-services-android-serialization-gson",
                     "caption": "3",
                     "class": "332"
                   }
               ]
            }

4 个答案:

答案 0 :(得分:1)

错误 -

Exception is: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_ARRAY at line 1 column 26643 path $.data[1].content[27].content 

问题在于,内容字段内的内容字段是一个数组而不是字符串,这在代码示例中没有显示,但它是异常的含义。可能在某些情况下,内容是String,在某些情况下是数组。

这是一个类似的问题和答案 - Gson - Same field name, different types

答案 1 :(得分:0)

是的,可以归档此回复。

    public class ContentEntity {

        private ArrayList<Content> content;

        public class Content {
            private String type;
            private String image;
            private int width;
            private int height;
            private String content;
            private String link;
            private String caption;
            @SerializedName("class")
            private String className;

// Add getter and setter here
        }
    }

尝试使用GSON解析它时使用下面的实体。

答案 2 :(得分:0)

使用默认表示可能会导致这种情况,因为您具有相同名称的键。也许编写自己的反序列化器会有所帮助。

假设您有一个Java类名称&#34; Content&#34; json-String表示此对象的数组:

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Content.class, new MyBrandNewContentDeserializer());

Gson gson = gsonBuilder.create();
Content[] conts = gson.fromJson(jsonInput, Content.class);

在反序列化器中,您可以对字符串类型&#34;内容&#34;

做出反应

答案 3 :(得分:0)

尝试使用http://www.jsonschema2pojo.org/。只需提供您的json,选择JSON作为源类型,然后选择Gson作为注释样式。它将生成一个POJO类