java - Gson 应为 STRING 但实际为 BEGIN_ARRAY?

标签 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, 
     }
    ]
   }   
  ]
 ]
]

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

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 提示:Expected STRING but was BEGIN_ARRAY,来自这一行:

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

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

最佳答案

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

关于java - Gson 应为 STRING 但实际为 BEGIN_ARRAY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24321975/

相关文章:

java - 在 Java 中从 HTTPS URL 下载图像

java - Java进程从子进程获取InputStream

java - 获取 java.lang.NoClassDefFoundError : com/google/gson/Gson

java - 自定义错误页面未捕获 tomcat 中引发的异常

java - 切换链表中的两个元素

json - 使用 JSONPath 或 SelectTokens 查询 JSON?在 C# 中使用 JSON.NET

java - 找不到媒体类型=应用程序/json 的 MessageBodyWriter

c# - c#解析Json数据转xml

java - Gson 中的 DateFormat 模式 "yyyy-MM-dd' T'HH :mm:ss. SSS'Z'"

java - 使用 GSON 的空字段的默认值