2014-07-10 2 views
0

У меня есть нижняя строка json, я хочу извлечь из этой строки все поля "id", которые после "number":(15124,13498).json string-fields extract, in Talend 5.5

Я пытаюсь сделать это jsonpath в Java коде следующим образом:

String pd = JsonPath.read(jsonString, "$.response.data.number.id");` 

, но я получаю исключение из-за неправильного jsonpath, какие jsonpath именно я должен написать для получения "id" после "number" области?

Ниже JSon строки:

{ 
    "response": { 
     "code": 200, 
     "msg": "Success", 
     "data": { 
      "number": { 
       "id": "13498", 
       "name": "(Not in used) Daniel - 30138444", 
       "network_id": 1, 
       "network_type": "Facebook", 
       "currency": "USD", 
       "currency_info": { 
        "prefix": "$", 
        "postfix": "", 
        "name": "US Dollars" 
       }, 
       "timezone": { 
        "id": 92, 
        "code": "PST", 
        "region": "America", 
        "locality": "Los_Angeles", 
        "offset": -7, 
        "facebook_code": 1 
       } 
      } 
     } 
    } 
} 
+0

Какое точное исключение? –

+0

Решается ли ваш вопрос? –

ответ

0

Это работает отлично

String pd = JsonPath.read("{\n" + 
      " \"response\": {\n" + 
      "  \"code\": 200,\n" + 
      "  \"msg\": \"Success\",\n" + 
      "  \"data\": {\n" + 
      "   \"number\": {\n" + 
      "    \"id\": \"13498\",\n" + 
      "    \"name\": \"(Not in used) Daniel - 30138444\",\n" + 
      "    \"network_id\": 1,\n" + 
      "    \"network_type\": \"Facebook\",\n" + 
      "    \"currency\": \"USD\",\n" + 
      "    \"currency_info\": {\n" + 
      "     \"prefix\": \"$\",\n" + 
      "     \"postfix\": \"\",\n" + 
      "     \"name\": \"US Dollars\"\n" + 
      "    },\n" + 
      "    \"timezone\": {\n" + 
      "     \"id\": 92,\n" + 
      "     \"code\": \"PST\",\n" + 
      "     \"region\": \"America\",\n" + 
      "     \"locality\": \"Los_Angeles\",\n" + 
      "     \"offset\": -7,\n" + 
      "     \"facebook_code\": 1\n" + 
      "    }\n" + 
      "   }\n" + 
      "  }\n" + 
      " }\n" + 
      "}", "$.response.data.number.id"); 
    System.out.println(pd); 

Выход:

13498 

Проверьте вы передаете правильно JSON в jsonString

+0

«Прекрасно работает для меня» - это не ответ. –

+0

@DmitryGinzburg Нет другого ответа, если нет реального вопроса. У тебя есть другой ответ? –

+0

Так что не отвечайте на неправильные вопросы. –

-1

Я думаю, что из того, что вы ищете, вы получите список как результат. Я также чувствую, что более разумно иметь поле данных как массив, а не объект. Тогда вы можете попробовать что-то вроде этого;

List<String> ids = JsonPath.read(json, "$.response.data[*].number.id"); 
+0

В '' '' 'JSON'.http: //code.google.com/p/json-path/ –

+0

' '' '' '' '' 'не' 'Список '', то 'Array'. По моему личному мнению, имеет смысл иметь один для данных, но, как говорится, он очень сильно зависит от того, как/откуда поступает вход. Я просто пытаюсь облегчить жизнь OPs, учитывая, что он хочет всех идентификаторов, а не только один. – user3755345

+0

@RuchiraGayanRanaweera, прочитайте ответ, прежде чем передавать такие комментарии. – user3755345