具有复杂JSONObject的GSON fromJson无效

时间:2016-04-14 16:08:32

标签: android json gson

我正在尝试使用带有简单JSONObject的GSON fromJson(),但由于某种原因它不起作用。它根本不打印任何堆栈跟踪。也许我在我的代码中做了一些非常错误的事情,有人可以提供帮助:

JSONObject json = new JSONObject();

json.put("id", "1");
json.put("name", "Test 1");

JSONObject json2 = new JSONObject();

json2.put("id", "2");
json2.put("name", "Test 2");

JSONArray array = new JSONArray();
array.put(json);
array.put(json2);

JSONObject jsonAll = new JSONObject();
jsonAll.put("tests", array );

Gson gson = new Gson();

Test[] data = gson.fromJson(jsonAll.toString(), Test[].class);

我的测试课:

public class Test {

    public String id;

    public String name;

    public Test(String id, String name){
        this.id = id;
        this.name = name;
    }

}

我正在尝试在Android中解析此问题,但它无法正常工作或打印错误..

解决:

测试[] data = gson.fromJson( jsonAll.get(“tests”)。toString(),Test [] .class);

或者使用K Neeraj Lal的答案,它也有效!

2 个答案:

答案 0 :(得分:1)

这是你必须要做的。创建两个类Tests.javaTest.java

<强> Tests.java

public class Tests {
    List<Test> tests;

    public List<Test> getTests() {
        return tests;
    }

    public void setTests(List<Test> tests) {
        this.tests = tests;
    }
}

Test.java (您的测试类)

public class Test {

    public String id;

    public String name;

    public Test(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

现在使用Gson解析数据,如下所示,

    Tests data = new Gson().fromJson(jsonAll.toString(), Tests.class);
    Log.e("Parsed Data", data.getTests().toString());

答案 1 :(得分:1)

我认为您的问题可能出现在: Test[] data = gson.fromJson(jsonAll.toString(), Test[].class);行,

我把它改成了 Test[] data = gson.fromJson(jsonAll.get("tests").toString(), Test[].class);它对我有用

解析器并不知道要查看&#34;测试&#34;数组的标记