Gson预计STRING但是BEGIN_ARRAY?

时间:2014-06-20 07:21:10

标签: java json gson

我试图解析像这样的JSON字符串(Json字符串是从在线API获得的)

[
 [
  [
   {
    "id": 0, 
    "number": 22,
    "arg": []
   }, 
   {
    "id": 1, 
    "number": 1, 
    "arg": [
     {
      "id": 0, 
      "type": "A0", 
      "beg": 0, 
     }, 
     {
      "id": 1, 
      "type": "A1", 
      "beg": 2, 
     }
    ]
   }   
  ]
 ]
]

我正在使用Gson库for java。 我的工作是获得"数字"的价值。属性。要做到这一点,我想我需要这样做:

jsonobject = something(???)
number = jsonobject[0][0][1]["number"]

所以我试试:

Gson gson = new Gson();
JsonParser parser = new JsonParser();
JsonArray jArray = parser.parse(jstring).getAsJsonArray();
for(JsonElement obj : jArray )
{

String cse = gson.fromJson( obj , String.class);
System.out.println(cse);
}

然而,java抱怨:预期的STRING但是BEGIN_ARRAY ,来自这一行:

String cse = gson.fromJson( obj , String.class);

有什么想法吗?提前谢谢。

1 个答案:

答案 0 :(得分:5)

返回ArrayList<ArrayList<ArrayList<Map<String, Object>>>>

Type type = new TypeToken<ArrayList<ArrayList<ArrayList<Map<String, Object>>>>>() {}.getType();
ArrayList<ArrayList<ArrayList<Map<String, Object>>>> data = gson.fromJson(json, type);
System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(data));

或者您也可以转换为JAVA对象

class MyJSONObj{
    private double id;
    private double number;
    private List<MyArgJson> arg;
    // getter & setter
}

class MyArgJson{
    private double id;
    private String type;
    private double beg;
    // getter & setter
}

Type type = new TypeToken<ArrayList<ArrayList<ArrayList<MyJSONObj>>>>() {}.getType();
ArrayList<ArrayList<ArrayList<MyJSONObj>>> data = gson.fromJson(json, type);
System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(data));

输出:

[
  [
    [
      {
        "id": 0.0,
        "number": 22.0,
        "arg": []
      },
      {
        "id": 1.0,
        "number": 1.0,
        "arg": [
          {
            "id": 0.0,
            "type": "A0",
            "beg": 0.0
          },
          {
            "id": 1.0,
            "type": "A1",
            "beg": 2.0
          }
        ]
      }
    ]
  ]
]