我有json:
{"test": [{"param1": "param"}],
"test2": "test",
"test3": "test2"}
如何让fromGson正确解析json中的数组,以便将数组填充到特定对象类型的数组中。
因此,测试应映射到TestObject[] test;
test2 -> String test2;
test3 -> String test3;
我尝试gson.fromJson(response, TestData.class);
给了我一个错误:com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 664
(fromJson没有正确解析json中的数组)。
我也尝试过这篇文章: Parsing JSON array into java.util.List with Gson
但感到困惑。
但这不起作用
答案 0 :(得分:1)
答案
public class TestClass {
public String param1;
}
public class TestMap {
public TestClass[] Test;
public String test2;
public String test3;
}
public Collection<TestMap> collectionFromJSON(String jsonString) {
Gson gson = new Gson();
Collection<TestMap> testMaps = gson.fromJson(jsonString, new TypeToken<Collection<TestMap>>() {
}.getType());
return testMaps;
}
public TestMap singleFromJSON(String jsonString) {
Gson gson = new Gson();
Journal testMap = gson.fromJson(jsonString, TestMap.class);
return testMap;
}
好的,我会在这里解释一下。
解释
通常,如果在另一个对象中有嵌套的对象数组,则需要创建一个新类。 IE浏览器。如果Journal有Categories,则Category有另外两个属性,title和index。
该课程将如
class Journal {
public Category[] categories;
....
}
class Category {
public String title;
public Integer index;
....
}
所以现在,错误是混淆了String of String和Class of Class。如果json是
{"Test", ["Test1", "Test2"...]
"Test2": "Test3"}
您可以将其定义为String数组。但它是一个嵌套的JSON对象,所以它必须再次成为类。
答案 1 :(得分:0)
没有看到你的课,我会猜。这个错误
com.google.gson.JsonSyntaxException:java.lang.IllegalStateException: 期望一个字符串但在第1行第664列是BEGIN_OBJECT
表示您正在尝试反序列化String
,例如
"some string"
但JSON实际包含的是一个JSON对象,类似于
{"name" : "value"}
您的课程可能映射错误。它应该是
String test2;
String test3;
TestObject[] test;
TestObject
应该
public class TestObject {
String param1;
}
因为JSON包含一个名为param1
的JSON字符串。
答案 2 :(得分:-1)
python有一个非常有用的模块json
尝试var TestObject=json.parse()