0

我有这个 JSON

{"A":"valA",
"B":["valB"],
"C":"valC",
"D":"valD",
"data":[{
    "data1":"dval1",
    "data2":"dval2",
    "data3":"dval3",
        "data4":"dval4",}],
"F":"valF"}

Java 对象:

public class ABCDObject {
        private String A;
        private String B;
        private String C;
        private String D;
        private List<String> data = new ArrayList<String>(){
                {
                        add("data1");
                        add("data2");
                        add("data3");
                        add("data4");
                        }
                };
        private String F;

        //getters for the above A,B,C,D, and F 
                public List<String> getData() {
                return data;
        }

主班

Gson gson = new Gson();
        ABCDObject abcdObj = gson.fromJson(response, ABCDObject.class);

我正在尝试访问 C 的值

abcdObj.getC();

我收到错误 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_ARRAY at line 9 column 17

另一个问题是如何访问data的值-->data1等等

4

1 回答 1

2

JSON 与对象不匹配,包括:

  • B是 JSON 中的一个数组,并且是一个字符串ABCDObject
  • data是 JSON 中具有四个属性的对象数组,以及ABCDObject.

用示例编辑

使用以下两个类,并修复格式错误的 JSON(data4 后的虚假逗号),这可以按预期工作。

数据- 保存“数据”数组的每个元素,每个数据对象有四个数据字段。

public class Data {
    private String data1;
    private String data2;
    private String data3;
    private String data4;
    // Plus getters, setters, toString
}

JsonHolder - 封装整个 JSON 对象。

import java.util.List;

public class JsonHolder {
    private String A;
    private List<String> B;
    private String C;
    private String D;
    private List<Data> data;
    private String F;
    // Plus getters, setters, toString
}

完整性检查

public static void main(String[] args) {
    Gson gson = new Gson();
    JsonHolder json = gson.fromJson(JSON_STRING, JsonHolder.class);
    System.out.println(json);
}

输出

JsonHolder{A='valA', B=[valB], C='valC', D='valD', data=[Data{data1='dval1', data2='dval2', data3='dval3', data4='dval4'}], F='valF'}

请注意,在这种情况下,尝试通过usingJsonReader.setLenient(true)解决格式错误的 JSON 是行不通的;它仅在数组(集合)末尾处理额外的逗号,而不是在您的示例 JSON 包含的对象本身中。

于 2012-05-30T12:15:00.960 回答