我喜欢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
,b [ts,si and tt[day]]
和senderIp
的值。
现在我有2个问题,如何在'b'和'senderIp'中提取所有'ts'属性。我已经使用下面的代码为ak,ts和si。我不确定我是如何得到'tt'的,当我运行这段代码时,我得到一个例外如下
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
。
答案 0 :(得分:0)
$.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字符串以便于阅读?