我有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"
}
]
}
答案 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类