0

我正在尝试将从纽约时报返回的数据保存到一个数组中。对于每一页结果,The New York Times API 返回一个包含 10 个对象的新数组。结果,JSONArray results只是多个数组的集合。这让我很难做到,saveJSONArray results因为它只保存了一个数组(里面有 10 个对象)。什么是最好的解决方案?如何将所有 JSONObject 解析为一个数组?谢谢!

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

1 回答 1

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 } ] ]
于 2013-10-28T10:24:08.863 回答