【发布时间】:2016-11-29 05:15:25
【问题描述】:
我正在努力从格式如下的 JSON 文件中检索一些值:
{
"search": {
"entry": [
{
"found": "identity=9454532,l=big,ton=grand,k=molvi",
"attribute": [
{
"name": "firstname",
"value": [
"Lucas"
]
},
{
"name": "lastname",
"value": [
"Brandon"
]
}
]
}
],
"return": {
"code": 0,
"message": "Success",
"count": 1
}
}
}
我尝试了不同的方法(json、gson、jayway-JsonPath),但我无法从“属性”数组中获取值,只能从第一个数组中获取值。我不知道如何指定“属性”是 JSONArray 而不是 JSONObject 或如何设置正确的路径。 这是我正在使用的最后一个代码,它在找到一个数组时停止:
public void String nameObtain (String email) throws IOException{
String link = "http://jsonfile/" + email;
JSONObject json = readJsonFromUrl(link);
JSONObject rootObject = json.getJSONObject("search");
JSONArray firstArray = rootObject.getJSONArray("entry");
for (int i = 0, size = firstArray.length(); i < size; i++) {
JSONObject objectInArray = firstArray.getJSONObject(i);
String[] elementNames = JSONObject.getNames(objectInArray);
System.out.printf("%d ELEMENTS IN CURRENT OBJECT:\n", elementNames.length);
for (String elementName : elementNames) {
String value = objectInArray.getString(elementName);
System.out.printf("name=%s, value=%s\n", elementName, value);
}
}
}
我想做的是获得 Lucas 或 Brandon 的值。任何帮助都感激不尽!
【问题讨论】:
-
所以你想得到一个 JSON 数组但使用的是
getString?如果您不想指定期望的类型,只需使用简单的get方法即可。 -
或者使用
getJSONArray来表示你知道的 JSON 数组。 -
你能取回“entry”数组的值吗?如果是这样,那么它应该类似于“属性”数组。
getJSONArray方法就是您所需要的。从它返回的任何内容都可以视为 JSONObject 并进行迭代。 -
@SotiriosDelimanolis 如果我只是尝试使用 json.get("firstname");找不到对象。我无法实现的是设置到达该数组的正确路径。
-
没有正确的路径。您可以单独获取每个成员,直到找到您要查找的嵌套最多的成员。