2016-09-22 54 views
0

我使用的Liferay 6.2,並有一個JSONObject包含以下內容:如何提取嵌套的JSON元素的Liferay

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

我有一個包含路徑/選擇一個String/whatsitcalled在某處的JSONObject指向:foo.bar.baz[0]

我該如何去獲取JSONObject對應的值,即「42」?

我能找到的所有方法只能處理下一層,沒有任何東西可以涵蓋嵌套。我可以手動解析路徑,但沒有更簡單的方法嗎?

+0

我知道,'eval'是邪惡的。不過,怎麼樣:''eval('myObjectName。'+ selector)''with'selector ='foo.bar.baz [0]';'? –

+0

我正在使用Java,而不是Javascript,所以'eval'不是一個選項。 (並且使用ScriptEngine執行JS只是覺得不好主意......) – icke

回答

1

使用此java庫爲json執行xpath類似的查詢。 我在Liferay中成功地使用了它。

https://github.com/jayway/JsonPath

+0

這看起來像是一個很有前途的解決方案。我必須將JSON轉換爲字符串,而不是在JSONObject本身上工作,但它應該可以工作,謝謝! – icke

+1

而不是轉換爲字符串,JsonPath libray有幾個適配器來改變json框架。支持'org.json',在它上面工作,並且只在最後一點,converto到liferay json。 –

0

有許多方法以編程方式從JSON對象retrive數據。

你可以使用自己的Liferay支持JSON庫,GSON或Jackson庫(我推薦你最後一個,它非常強大)。