2013-10-28 35 views
0

我想將從紐約時報返回的數據保存到一個數組中。對於結果的每一頁,紐約時報API返回一個包含10個對象的新數組。因此,JSONArray results只是多個數組的集合。這使我很難saveJSONArray results,因爲它只保存一個數組(其中有10個objets)。什麼是最好的解決方案?我如何將所有JSONObjects解析到一個數組中?謝謝!如何在處理中使用紐約時報API處理JSON對象和JSON數組

String baseURL = "http://api.nytimes.com/svc/search/v1/article"; 
String apiKey = "xxxxxxxxxxxxxxxxxxxxxxxxx:x:xxxxxx"; 


size(500, 300); 


String beginDate = "19940101"; 
String endDate = "19960101"; 
String word = "O.J.+Simpson"; 

for (int i = 0; i < 150; i++) { 
    String request = baseURL + "?query=" + word + "&begin_date=" + beginDate + "&end_date=" + endDate + "&offset=" + i + "&api-key=" + apiKey; 
    i = i + 1; 
    String result = join(loadStrings(request), ""); 
    JSONObject nytData = JSONObject.parse(result); 

    JSONArray results = nytData.getJSONArray("results"); 

    //saveJSONArray(results, "data/new.json"); 
} 

回答

1

很明顯,saveJSONArray不會附加到文件,因此它每次都用最後一批10個項目覆蓋它。你必須收集結果,然後將它們保存在這樣的文件:

JSONArray results = new JSONArray(); 

for (int i = 0; i < 150; i++) { 
    String request = baseURL + "?query=" + word + "&begin_date=" + beginDate + "&end_date=" + endDate + "&offset=" + i + "&api-key=" + apiKey; 
    i = i + 1; 
    String result = join(loadStrings(request), ""); 
    JSONObject nytData = JSONObject.parse(result); 

    JSONArray newData = nytData.getJSONArray("results"); 
    for(int j = 0; j < newData.size(); j++) 
    results.append(newData.getJSONObject(j)); 
    //println(results); 
} 
    saveJSONArray(results, "data/new.json"); 

這將產生與一個JSONObjects一個JSONArray的內部結構的文件中是這樣的:

[ { object from batch 1}, { object from batch 1}, { object from batch 2 } ] 

,或者,如果要保留10項封裝,而不是嵌套的for循環使用:

results.append(nytData.getJSONArray("results")); 

這將產生在這樣JSONArrays結果在JSONArrays一個JSONObjects:

[ [ { object from batch 1}, { object from batch 1} ],[ { object from batch 2 } ] ]