2013-10-28 2 views
0

Я пытаюсь сохранить данные, возвращаемые из New York Times в один массив. Для каждой страницы результатов API New York Times возвращает новый массив с 10 объектами. В результате JSONArray results - это всего лишь коллекция из нескольких массивов. Это затрудняет мне saveJSONArray results, потому что он сохраняет только один из массивов (с 10 объектами внутри него). Какое лучшее решение? Как разобрать все JSONObjects в один массив? Благодаря!Как работать с объектами JSON и массивами JSON с использованием API New York Times при обработке

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"); 

, который будет производить файл с внутренней структурой JSONArray с JSONObjects в так:

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

или, если хотят, чтобы сохранить 10-инкапсуляцию элемента, вместо того, чтобы вложенная для использования петли:

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

, которые будут давать результаты как JSONObjects в JSONArrays в JSONArrays как это:

[ [ { object from batch 1}, { object from batch 1} ],[ { object from batch 2 } ] ] 
Смежные вопросы