2

我正在连接到第三方 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

4 回答 4

4

这是我的 json 字符串

String s="{"age":0,"name":"name","email":"emailk","address":{"housename":"villa"}}";

我使用以下代码来获取户名

    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"

我认为没有其他方法可以做到这一点。我也尝试过其他方式,但我没有得到任何输出。

于 2013-02-07T10:31:57.227 回答
4

您可以通过以下方式从 jsonObject 中检索。

JSONObject jObject = new JSONObject(yourresponse);
Log.i("Desired Info is ",jObject.getJSONObject("response").getJSONObject("data").getString("myDesiredInfo"));
于 2013-02-07T12:56:54.797 回答
1

我编写了一个小实用程序方法,它使用 Gson 的 API 从 JSON 对象中获取值作为字符串,基于值的 java.util.List。所以对于我最初的问题,列表对象将是“response”、“data”、“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;
    }
}
于 2013-02-13T07:38:27.100 回答
0

大多数语言都有 JSON 解码库,其中很多是原生的。不知道您使用的是什么语言,所以这里以 PHP 为例:

$jsonObj = json_decode($json);
$json->response->data->myDesiredInfo;

Ruby、Python、Java——所有这些语言都有很好的库。

于 2013-02-07T10:36:41.493 回答