2016-02-14 54 views
1

我必須解析Java中的JSON,但我陷入了困境。Java JSON到數組

我的代碼如下所示:

<%@ page import="javax.net.ssl.HttpsURLConnection"%> 
<%@ page import="com.google.gdata.client.*"%> 
<%@ page import="com.google.gdata.client.calendar.*"%> 
<%@ page import="com.google.gdata.data.*"%> 
<%@ page import="com.google.gdata.data.extensions.*"%> 
<%@ page import="com.google.gdata.util.*"%> 
<%@ page import="java.net.URL"%> 
<%@ page import="java.io.BufferedReader"%> 
<%@ page import="java.io.InputStreamReader"%> 
<%@ page import="org.json.JSONArray"%> 
<%@ page import="org.json.JSONObject"%> 
<%@ page import="java.util.Arrays"%> 
<%@ page import="java.util.ArrayList"%> 

<% 
String sb = "{\"photos\":{\"page\":1,\"pages\":1,\"perpage\":99,\"total\":\"6\",\"photo\":[{\"id\":\"23106093192\",\"owner\":\"[email protected]\",\"secret\":\"5bf3d1b380\",\"server\":\"652\",\"farm\":1,\"title\":\"Student dorm at night\",\"ispublic\":1,\"isfriend\":0,\"isfamily\":0},{\"id\":\"22338004435\",\"owner\":\"[email protected]\",\"secret\":\"e867cf3148\",\"server\":\"5815\",\"farm\":6,\"title\":\"Night lights\",\"ispublic\":1,\"isfriend\":0,\"isfamily\":0},{\"id\":\"16902142400\",\"owner\":\"[email protected]\",\"secret\":\"ccaf7a0a08\",\"server\":\"7615\",\"farm\":8,\"title\":\"Rapa galbena\",\"ispublic\":1,\"isfriend\":0,\"isfamily\":0},{\"id\":\"16293296811\",\"owner\":\"[email protected]\",\"secret\":\"1f524b67ca\",\"server\":\"7482\",\"farm\":8,\"title\":\"Night lights\",\"ispublic\":1,\"isfriend\":0,\"isfamily\":0},{\"id\":\"15828075371\",\"owner\":\"[email protected]\",\"secret\":\"66474ae8a1\",\"server\":\"8396\",\"farm\":9,\"title\":\"Iasi at Night\",\"ispublic\":1,\"isfriend\":0,\"isfamily\":0},{\"id\":\"14026680657\",\"owner\":\"[email protected]\",\"secret\":\"1ca0549a7b\",\"server\":\"2923\",\"farm\":3,\"title\":\"Iasi\",\"ispublic\":1,\"isfriend\":0,\"isfamily\":0}]},\"stat\":\"ok\"}"; 



JSONObject obj = new JSONObject(sb); 
JSONObject photos = obj.getJSONObject("photos"); 

out.println(photos.get("photo")); 
%> 

輸出:

[{"isfamily":0,"farm":1,"id":"23106093192","title":"Student dorm at night","ispublic":1,"owner":"[email protected]","secret":"5bf3d1b380","server":"652","isfriend":0},{"isfamily":0,"farm":6,"id":"22338004435","title":"Night lights","ispublic":1,"owner":"[email protected]","secret":"e867cf3148","server":"5815","isfriend":0},{"isfamily":0,"farm":8,"id":"16902142400","title":"Rapa galbena","ispublic":1,"owner":"[email protected]","secret":"ccaf7a0a08","server":"7615","isfriend":0},{"isfamily":0,"farm":8,"id":"16293296811","title":"Night lights","ispublic":1,"owner":"[email protected]","secret":"1f524b67ca","server":"7482","isfriend":0},{"isfamily":0,"farm":9,"id":"15828075371","title":"Iasi at Night","ispublic":1,"owner":"[email protected]","secret":"66474ae8a1","server":"8396","isfriend":0},{"isfamily":0,"farm":3,"id":"14026680657","title":"Iasi","ispublic":1,"owner":"[email protected]","secret":"1ca0549a7b","server":"2923","isfriend":0}] 

我所能做的就是輸出所需的 「陣列」 作爲一個字符串。

我需要將打印的字符串解析爲數組數組。

試圖從輸出做另一個JSON對象,但這種方法似乎要失敗......

任何建議嗎?

回答

2

你有對象數組中的輸出photos.get("photo")

你可以用在JSONArray

JSONArray arr = photos.getJSONArray("photo"); 
arr.getJSONObject(0).getString("title"); // or you can loop over all objects 
+0

想你的想法,但我得到了以下錯誤:表達式的類型必須是一個數組類型,但它解析爲JSONArray – RazvanZ

+0

我也試過做一個ArrayList,但我得到一個類似的錯誤... – RazvanZ

+0

@RazvanZ嘗試更新的答案 –

0

解決:

JSONArray arr = photos.getJSONArray("photo"); 
//arr[0].getString('title'); // or you can loop over all objects // title should have double quotes 

JSONObject item = arr.getJSONObject(0); 
    String result = item.getString("title");