2013-03-07 29 views
-1

更新:我應該已經提到過這個問題:我首先考慮了一個Java/JSON映射框架,但是我的經理不希望我添加任何更多的依賴項到項目中,所以這是一個選項。 JSON-Java jar已經在我們的類路徑中,所以我可以使用它,但是仍然沒有通過樹看到森林如何使用它。從JSON中提取字段最簡單的方法

我的Java程序是爲以下形式的手JSON操作(雖然該值將改變所有的時間):

{"order":{"booze":"1","handled":"0","credits":"0.6", 
    "execute":0,"available":["299258"],"approved":[], 
    "blizzard":"143030","reviewable":["930932","283982","782821"], 
    "units":"6","pending":["298233","329449"],"hobbit":"blasphemy"}} 

我在尋找最簡單,高效,萬無一失的方式挖走具體從這個JSON字符串中取值並將它們聚合成一個List<Long>

具體來說,我正在尋找,提取和聚集所有的「IDS」,即,所有你看到的availableapprovedreviewablepending字段的數值。這些字段中的每一個都是0 +「ID」的數組。所以,在上面的例子中,我們看到的id以下擊穿:

  • available:具有1點的ID(299258)
  • approved:具有0的id
  • reviewable:具有3點的ID(930932,283982, 782821)
  • pending:有2個IDS(298233,329449)

我需要一些Java代碼來運行併產生與這些所提取的ID的所有6 List<Long> ,沒有特別的順序。 ID只需要將其放入列表中即可。

這感覺像一個令人難以置信的複雜,捲曲的正則表達式,我甚至不知道從哪裏開始。任何幫助都非常感謝。提前致謝。

+0

正則表達式?爲什麼不只是解析JSON? – 2013-03-07 23:55:17

+0

http://json.org/javadoc/org/json/package-summary.html – 2013-03-07 23:55:41

+0

謝謝 - 請參閱我的更新 – IAmYourFaja 2013-03-08 00:01:49

回答

5

最簡單的方法是IMO使用JSON庫如gsonjacksonjson.org等,解析德成JSON對象,並創建一個新的List<Long>你需要的屬性的值。

與僞GSON:

class Order { 
    long[] available; 
    long[] approved; 
    ... 
} 

Order order = gson.fromJson("{ your json goes here }", Order.class); 

List<Long> result = new ArrayList<Long>(); 
result.add(order.getAvailable()); 
result.add(order.getApproved()); 
... 

與僞json.org/java:

JSONObject myobject = new JSONObject("{ your json goes here"}); 
JSONObject order = myobject.getJSONObject("order"); 

List<Long> result = new ArrayList<Long>(); 
for (int i=0; i<order.getJSONArray("approved").length(); i++) { 
    Long value = order.getJSONArray("approved").getLong(i); 
    result.add(value); 
} 
... 
+0

感謝@Guido Garcia(+1) - 請參閱我的更新,但不幸使用映射框架對我來說不可能。 – IAmYourFaja 2013-03-08 00:00:24

+0

我剛剛在你的類路徑中添加了一個你已經擁有的庫的例子。 – 2013-03-08 00:15:57

相關問題