从JSON内部获取值

时间:2013-02-07 09:41:41

标签: java json gson

我正在连接第三方API并获取一个长JSON字符串。我只需要一个值,但它位于层次结构的内部。有没有一个简单的方法来获得它,而不是通过整个事情?我看了一遍,但似乎没什么好看的。

这是我的例子:

"response":{"status":1,"httpStatus":200,"data":{"myDesiredInfo":"someInfo"},"errors":[],"errorMessage":null}}

我一直在尝试使用Gson,所以我可以将这个blob作为JsonObject。我确信有一些简单的东西,比如:

jsonObject.get("myDesiredInfo") 

或至少是这样的:

jsonObject.get("response.data.myDesiredInfo") 

但似乎并不存在。

那么是否有任何解析器允许我这样做?

4 个答案:

答案 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 - 所有这些语言都有很好的库。