Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用Gson库对嵌套的JSON对象进行排序?_Android_Json_Gson - Fatal编程技术网

Android 如何使用Gson库对嵌套的JSON对象进行排序?

Android 如何使用Gson库对嵌套的JSON对象进行排序?,android,json,gson,Android,Json,Gson,我试图解析我的JSON数据,它看起来像下面的数据。 我已成功创建了一些字段,但正在尝试获取“术语”下“类别”下“0”下的“名称” [ { “ID”:1710, “状态”:“发布”, “类型”:“职位”, “内容”:“Lorem ipsum”, “父项”:空, “格式”:“标准”, “修改后的_tz”:“UTC” }, “特色图片”:{ “ID”:1713, “标题”:“公里”, “状态”:“继承”, “类型”:“附件”, } } } } }, “条款”:{ “类别”:[> { “ID”:2, “

我试图解析我的JSON数据,它看起来像下面的数据。 我已成功创建了一些字段,但正在尝试获取“术语”下“类别”下“0”下的“名称”

[
{
“ID”:1710,
“状态”:“发布”,
“类型”:“职位”,
“内容”:“Lorem ipsum”,
“父项”:空,
“格式”:“标准”,
“修改后的_tz”:“UTC”
},
“特色图片”:{
“ID”:1713,
“标题”:“公里”,
“状态”:“继承”,
“类型”:“附件”,
}
}
}
}
},
“条款”:{
“类别”:[>
{
“ID”:2,
“名称”:“娱乐”,
“鼻涕虫”:“娱乐”,
“分类法”:“类别”,
“父项”:空,
“计数”:30,
}
]
}
}
]
我就是这样解析数据的:

List<Object> list = (List) new Gson.fromJson(response, List.class);
List<String, Object> mapPost = list.get(index);
List<String, Object> terms = (Map<String, Object>) mapPost.get("terms");
List<String, Object> category= (Map<String, Object>) terms.get("category");
List<String, Object> zero= (Map<String, Object>) category.get("0");
String tag = (String) zero.get("name");
List List=(List)new Gson.fromJson(response,List.class);
List-mapPost=List.get(索引);
列表术语=(Map)mapPost.get(“术语”);
List category=(Map)terms.get(“category”);
List zero=(Map)category.get(“0”);
String标记=(String)zero.get(“name”);
请帮助我,我做错了什么?

我找到了一个解决方案:

因为“category”标记包含一个JSON对象数组(在本例中为单个对象)

我将“类别”转换为arraylist

Map<String, Object> terms = (Map<String, Object>) mapPost.get("terms");
ArrayList category = new ArrayList();
category = ((ArrayList) terms.get("category")); //<--Cast to ArrayList
zero  = (Map<String, Object>) category.get(0);
我找到了一个解决方案:

因为“category”标记包含一个JSON对象数组(在本例中为单个对象)

我将“类别”转换为arraylist

Map<String, Object> terms = (Map<String, Object>) mapPost.get("terms");
ArrayList category = new ArrayList();
category = ((ArrayList) terms.get("category")); //<--Cast to ArrayList
zero  = (Map<String, Object>) category.get(0);

您提供的代码甚至无法编译(断开的
Gson
constructor调用;Java不提供
List
…)。列表也不能在运行时强制转换为映射。JSON也被破坏了,但是,假设您提供了一些代码,我认为您想要解析位于
$[(index)].terms.category[0]的
name

final String name=gson.fromJson(response,jsoneElement.class).getAsJsonArray()
.get(index.getAsJsonObject())
.get(“术语”).getAsJsonObject()
.get(“category”).getAsJsonArray()
.get(0.getAsJsonObject())
.get(“name”).getAsJsonPrimitive()
.getAsString();
System.out.println(名称);

您不需要对要遍历的每个嵌套对象进行反序列化(从性能角度来看,这更有效):只需遍历JSON树。

您提供的代码甚至无法编译(断开的
Gson
构造函数调用;Java不提供
List
…)。列表也不能在运行时强制转换为映射。JSON也被破坏了,但是,假设您提供了一些代码,我认为您想要解析位于
$[(index)].terms.category[0]的
name

final String name=gson.fromJson(response,jsoneElement.class).getAsJsonArray()
.get(index.getAsJsonObject())
.get(“术语”).getAsJsonObject()
.get(“category”).getAsJsonArray()
.get(0.getAsJsonObject())
.get(“name”).getAsJsonPrimitive()
.getAsString();
System.out.println(名称);

您不需要对要遍历的每个嵌套对象进行反序列化(从性能角度来看,这更有效):只需遍历JSON树。

它应该是
category.get(0)
0
是数组的索引,而不是JSON的键。下面是我收到的错误消息:“E/AndroidRuntime:FATAL EXCEPTION:main Process:example.example.com,PID:13804 java.lang.ClassCastException:java.util.ArrayList不能转换为java.util.Map'我之前错过了它,但您的代码甚至不应该编译?列表的语法无效。。。因此,即使在我建议的更改应该是
category.get(0)
之前,您也应该已经收到了错误
0
是数组的索引,而不是JSON的键。下面是我收到的错误消息:“E/AndroidRuntime:FATAL EXCEPTION:main Process:example.example.com,PID:13804 java.lang.ClassCastException:java.util.ArrayList不能转换为java.util.Map'我之前错过了它,但您的代码甚至不应该编译?列表的语法无效。。。因此,即使在我建议的更改之前,您也应该已经收到了错误,因为不确定用户是否会包含标记(即
最终字符串名称
),我将上面的代码包围在一个try-catch块中,可以吗?这要视情况而定。你可以把链子拆开,然后分析它的各个部分。我想避免把它拆开。试一试/接球可以吗?它对性能有影响吗?由于不确定用户是否会包含标记(即
最终字符串名
),我将上面的代码包围在一个try-catch块中,可以吗?这取决于具体情况。你可以把链子拆开,然后分析它的各个部分。我想避免把它拆开。试一试/接球可以吗?它对性能有影响吗?
String tag = (String) zero.get("name")