2012-09-17 4 views
3

меня JSon как это нижезначения Extract, используя 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 вопроса, как извлечь все атрибуты ts в 'b' и 'senderIp'. Я использовал приведенный ниже код для 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); 

Исключения в потоке «основные» java.lang.ClassCastException: net.minidev.json.JSONObject cannot be cast to java.lang.String.

ответ

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 для упрощения чтения?

+0

Нету ... Это не работает, выдает ошибку – user1677986

+0

исключение в потоке «основного» java.lang.ClassCastException: java.lang.Long не может быть приведен к java.lang.String – user1677986

+0

@ Хью Вольфа сделать его простой, я хочу извлечь значения значений ts, si, tt и 'senderIp' – user1677986

Смежные вопросы