Как оценить JSON Path с полями, которые содержат кавычки внутри значения? - PullRequest
0 голосов
/ 14 мая 2018

У меня есть поток NiFi, который принимает файлы JSON и оценивает аргумент пути JSON против них. Он отлично работает, за исключением случаев, когда речь идет о записях, которые содержат корейский текст. Оценщик Jayway JSONPath, похоже, не распознает escape "\" в поле заголовка перед символом двойной кавычки. Вот пример (добавлены новые строки, чтобы помочь с форматированием):

{"data": {"body": "[이데일리 김관용 기자] 우리 군이 2018 남북정상회담을 앞두고 남
북간 군사적 긴장\r\n완화와 평화로운 회담 분위기 조성을 위해 23일 0시를 기해 군사분계선
(MDL)\r\n일대에서의 대북확성기 방송을 중단했다.\r\n\r\n국방부는 이날 남북정상회담 계기 
대북확성기 방송 중단 관련 내용을 발표하며\r\n“이번 조치가 남북간 상호 비방과 선전활동을
 중단하고 ‘평화, 새로운 시작’을\r\n만들어 나가는 성과로 이어지기를 기대한다”고 밝혔
다.\r\n\r\n전방부대 우리 군 장병이 대북확성기 방송을 위한 장비를 점검하고 있다.\r\n[사
진=국방부공동취재단]\r\n\r\n\r\n\r\n▶ 당신의 생활 속 언제 어디서나 이데일리 \r\n▶ 
스마트 경제종합방송 ‘이데일리 TV’ | 모바일 투자정보 ‘투자플러스’\r\n▶ 실시간 뉴스와 
속보 ‘모바일 뉴스 앱’ | 모바일 주식 매매 ‘MP트래블러Ⅱ’\r\n▶ 전문가를 위한 국내 최상의 
금융정보단말기 ‘이데일리 마켓포인트 3.0’ | ‘이데일리 본드웹 2.0’\r\n▶ 증권전문가방송
 ‘이데일리 ON’ 1666-2200 | ‘ON스탁론’ 1599-2203\n<ⓒ종합 경제정보 미디어 이데일리 -
 무단전재 & 재배포 금지> \r\n", 
"mimeType": "text/plain", 
"language": "ko", 
"headline": "국방부 \"軍 대북확성기 방송, 23일 0시부터 중단\"", 
"id": "EDYM00251_1804232beO/5WAUgdlYbHS853hYOGrIL+Tj7oUjwSYwT"}}

Если этот объект находится в моем файле, путь JSON оценивает пробелы для всех аргументов пути. Есть ли способ заставить двигатель Jayway распознать "\"? Похоже, что работает правильно на других языках.

1 Ответ

0 голосов
/ 15 мая 2018

Я смог решить эту проблему после того, как понял разницу между определенными и неопределенными путями. Jayway github README указывает, что следующее сделает путь неопределенным и вернет список:

При оценке пути вам необходимо понять концепцию, когда путь определен. Путь неопределен, если он содержит:

.. - оператор глубокого сканирования

?(<expression>) - выражение

[<number>, <number> (, <number>)] - несколько индексов массива Неопределенные пути всегда возвращает список (представленный текущим JsonProvider).

Мой JSON выглядел следующим образом:

{
  "Version":"14", 
  "Items":[
    {"data": {"body": "[이데일리 ... \r\n", 
              "mimeType": "text/plain", 
              "language": "ko", 
              "headline": "국방부 \"軍 ... 중단\"", 
              "id": "1"}
    },
   {"data": {"body": "[이데일리 ... \r\n", 
             "mimeType": "text/plain", 
             "language": "ko", 
             "headline": "국방부 \"軍 ... 중단\"", 
             "id": "2"}
   ...
   }
  ]
}

Этот селектор пути JSON, который я использовал ($.data.headline), не получил значения, как я ожидал. Вместо этого он возвратил нулевые значения.

Изменение его на $.Items[*].data.headline или $..data.headline возвращает список каждого заголовка.

...