简体   繁体   中英

Extract value using JSON Path from array

I have Json like this below

{"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"]}}

I just need the values of ak , b [ts,si and tt[day]] and senderIp . Now I have 2 questions, how do I extract all 'ts' attributes in 'b' and 'senderIp'. I have used the below code for ak, ts and si. I am not sure how I get 'tt', also while I run this code I get an exception like below

    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);

Exception in thread "main" java.lang.ClassCastException: net.minidev.json.JSONObject cannot be cast to java.lang.String .

$.ehb[0] looks like a JavaScript object (with fields including "ts" and "tz"), not a string. So it's reasonable for your JSON parser to treat it as a JSONObject rather than a string. Probably you need to drill down to $.ehb[0].ts or whatever field you're interested in. Something like this:

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

I'm assuming it's your second String ak = line which causes the exception. I'm having trouble understanding your other question about the "ts" attributes. Maybe you could format the JSON string for easier reading?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM