3

我在下面有这样的Json

{"pd":"{\"e\":{\"h\":{\"ak\":\"120\",\"at\":\"app\"},\"b\":[{\"ts\":1319549658547,\"tz\":-400,\"s\":\"StartUpScreen\",\"et\":8,\"ev\":\"sessionStart\",\"si\":\"19477682-de55-414f-82c9-19bec331dc33\",\"tt\":{\"day\":\"Tuesday\"}},{\"ts\":132,\"tz\":-400,\"s\":\"StartUpScreen\",\"et\":3,\"ev\":\"AutomaticFeedRefresh\",\"si\":\"19477682-de55-414f-82c9-19bec331dc33\",\"tt\":{}},{\"ts\":131,\"tz\":-400,\"s\":\"MainScreen\",\"et\":3,\"ev\":\"MainScreen Event\",\"si\":\"19477682-de55-414f-82c9-19bec331dc33\",\"tt\":{}}],\"tt\":{\"OSV\":\"7.10\"}}}","serverPayload":{"httpHeaders":{"x-bluecoat-via":["35D3468EFF4D5F18"],"content-type":["application\/x-www-form-urlencoded"]},"senderIp":["101.100.000.100"]}}

我只需要 和的ak值。现在我有 2 个问题,如何提取 'b' 和 'senderIp' 中的所有 'ts' 属性。我已将以下代码用于 ak、ts 和 si。我不确定我是如何得到“tt”的,当我运行这段代码时,我得到一个如下所示的异常b [ts,si and tt[day]]senderIp

    String pd = JsonPath.read(jsonString, "$.pd");
    String ak = JsonPath.read(pd, "$e.h.ak");
    String ak = JsonPath.read(pd, "$e.h.b[0]");
//    String b = JsonPath.read(pd,"$.e.b[0][0]");
//    String b = JsonPath.read(pd,"$.e.b[0][5]");
    System.out.println("value of ak: "+ak);

线程“main”中的异常 java.lang.ClassCastException: net.minidev.json.JSONObject cannot be cast to java.lang.String

4

1 回答 1

1

$.e.h.b[0]看起来像一个 JavaScript 对象(字段包括“ts”和“tz”),而不是字符串。因此,您的 JSON 解析器将其视为 JSONObject 而不是字符串是合理的。可能您需要深入$.e.h.b[0].ts研究或您感兴趣的任何领域。像这样的东西:

long ts = JsonPath.read(pd, "$e.h.b[0].ts");

我假设这是您的第二String ak =行导致异常。我无法理解您关于“ts”属性的其他问题。也许您可以格式化 JSON 字符串以便于阅读?

于 2012-09-17T17:18:38.087 回答