【问题标题】:Gson Expected STRING but was BEGIN_ARRAY?Gson 预期为 STRING,但为 BEGIN_ARRAY?
【发布时间】:2014-06-20 07:21:09
【问题描述】:

我正在尝试解析像这样的 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, 
     }
    ]
   }   
  ]
 ]
]

我正在使用 Java 的 Gson 库。 我的工作是获取“数字”属性的值。为此,我认为我需要这样做:

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);

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

【问题讨论】:

  • 它是否是一个有效的 JSON 字符串。在这里测试它jsonlint,上面写着Parse error on line 18:
  • @Braj 不一定。无论如何,我有一种感觉是嵌套列表(看起来没用)导致了这个
  • 是的@TimCastelijns 我同意你的看法。只是删除我的评论。对不起。

标签: java json gson


【解决方案1】:

它返回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
          }
        ]
      }
    ]
  ]
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-10
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 2016-09-26
    • 2012-03-24
    相关资源
    最近更新 更多