我正在连接第三方API并获取一个长JSON字符串。我只需要一个值,但它位于层次结构的内部。有没有一个简单的方法来获得它,而不是通过整个事情?我看了一遍,但似乎没什么好看的。
这是我的例子:
"response":{"status":1,"httpStatus":200,"data":{"myDesiredInfo":"someInfo"},"errors":[],"errorMessage":null}}
我一直在尝试使用Gson,所以我可以将这个blob作为JsonObject。我确信有一些简单的东西,比如:
jsonObject.get("myDesiredInfo")
或至少是这样的:
jsonObject.get("response.data.myDesiredInfo")
但似乎并不存在。
那么是否有任何解析器允许我这样做?
答案 0 :(得分:4)
这是我的json字符串
String s="{"age":0,"name":"name","email":"emailk","address":{"housename":"villa"}}";
我使用以下代码获取housename
JsonElement je = new JsonParser().parse(s);
JsonObject asJsonObject = je.getAsJsonObject();
JsonElement get = asJsonObject.get("address");
System.out.println(s + "\n" + get);
JsonObject asJsonObject1 = get.getAsJsonObject();
JsonElement get1 = asJsonObject1.get("housename");
System.out.println(get1);
以下是我的输出:
{"age":0,"name":"name","email":"emailk","address":{"housename":"villa"}}
{"housename":"villa"}
"villa"
我认为还有另一种方法可以做到这一点。我也尝试过其他方式,但我没有得到任何输出。
答案 1 :(得分:4)
您可以从jsonObject中检索以下方法。
JSONObject jObject = new JSONObject(yourresponse);
Log.i("Desired Info is ",jObject.getJSONObject("response").getJSONObject("data").getString("myDesiredInfo"));
答案 2 :(得分:1)
我编写了一个小实用程序方法,该方法使用Gson的API从JSON对象获取值,基于值的java.util.List。因此,对于我原来的问题,列表对象将是“响应”,“数据”,“myDesiredInfo”。
当然可以改进,但这是一个开始。
/*
* Takes a JsonObject and parses it for a primitive value, going level by level
* according to the values in @infos
*/
public static String parseJson(JsonObject json, List<String> infos) {
try {
if(infos.size() == 0) {
return json.toString();
}
JsonElement je = json.get((String)infos.get(0));
infos.remove(0);
if(je instanceof JsonObject) {
return parseJson(je.getAsJsonObject(), infos);
} else {
return je.getAsString();
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
答案 3 :(得分:0)
大多数语言都有一个JSON解码库,其中很多都是原生的。不知道你正在使用什么语言,所以这里以PHP为例:
$jsonObj = json_decode($json);
$json->response->data->myDesiredInfo;
Ruby,Python,Java - 所有这些语言都有很好的库。