Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 934
user1677986 Avatar asked Jul 02 '26 10:07

user1677986


1 Answers

$.e.h.b[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 $.e.h.b[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?

like image 184
Hew Wolff Avatar answered Jul 04 '26 01:07

Hew Wolff



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!