2016-09-22 3 views
0

Я использую Liferay 6.2 и имеет JSONObject содержащего следующее:Как извлечь вложенные элементы JSON в Liferay

{ 
    "foo":{ 
     "bar":{ 
       "baz":["42","23"] 
       } 
     } 
} 

У меня есть строка, содержащая путь/селектор/whatsitcalled указывая где-то в этом JSONObject: foo.bar.baz[0]

Как мне получить соответствующее значение из JSONObject, то есть «42»?

Все методы, которые я мог найти, касались только следующего уровня, ничто, кажется, не охватывает вложенность. Я могу разобрать путь вручную, но нет ли более простого способа?

+0

Я знаю, что 'eval' является злом. Тем не менее, как насчет: 'eval ('myObjectName.' + Selector)' с 'selector = 'foo.bar.baz [0]';'? –

+0

Я работаю с Java, а не с Javascript, поэтому 'eval' не вариант. (И использование ScriptEngine для выполнения JS просто похоже на плохую идею ...) – icke

ответ

1

Используйте эту библиотеку java для выполнения аналогичного запроса xpath для json. Я использовал его с успехом в Лифере.

https://github.com/jayway/JsonPath

+0

Это похоже на многообещающее решение. Мне пришлось бы преобразовать JSON в String вместо работы над самим JSONObject, но он должен работать, спасибо! – icke

+1

Вместо преобразования в строку JsonPath libray имеет несколько адаптеров для изменения json framework. 'org.json' поддерживается, работает над ним и только в последнем пункте, converto to liferay json. –

0

Есть много способов retrive данных из объекта программно JSON.

Вы можете использовать собственную библиотеку JSON для поддержки Liferay, библиотеки GSON или Jackson (я рекомендую вам последний, это действительно мощный).