如何使用fromGson与数组

时间:2014-01-24 01:48:00

标签: java gson

我有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

但感到困惑。

但这不起作用

3 个答案:

答案 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()