0

我过去解析过一些简单的 json,但这个给我带来了更多麻烦。我正在尝试从维基百科的“历史上的这一天”中获取数据

带有 JSON 输出的示例 URL

常规 HTML 中的实际 URL

现在,如果您将 JSON URL 弹出到:http: //jsonlint.com/以获取细分,我遇到的第一个麻烦是在这种情况下的页面之后的对象之后,“27993”总是不同的,所以我该如何获取这个如果我不知道名字?

到目前为止,出于测试目的,我有这段代码:

JSONObject json = new JSONObject(result);  
input.close();  
JSONObject json2 = new JSONObject(json.getString("query").toString()); 
JSONObject json3 = new JSONObject(json2.getString("pages").toString()); 
JSONObject json4 = new JSONObject(json3.getString("27993").toString()); 
JSONArray contacts = json4.getJSONArray("revisions");
StringBuilder builder = new StringBuilder();
builder.append(contacts.getString(0));    
return builder.toString();

这将返回修订数组中的所有内容,这将导致我的下一个问题......是否有一种简单的方法来解析该输出?

编辑:解决问题#1的修订代码现在关于解析该输出?

            JSONObject json = new JSONObject(result);  
            input.close();  
            JSONObject json2 = new JSONObject(json.getString("query").toString()); 
            JSONObject json3 = new JSONObject(json2.getString("pages").toString()); 
            Iterator i = json3.keys();
            JSONObject j = null;
            while (i.hasNext()) {
                try {
                    String key = i.next().toString();
                    j = json3.getJSONObject(key);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
            JSONArray contacts = j.getJSONArray("revisions");
            StringBuilder builder = new StringBuilder();
            builder.append(contacts.getString(0));    
            return builder.toString();

问题的第二部分是解析此类输出的简单解决方案。这是一个片段:

":"{{pp-move-indef}}{{九月日历|float=right}}\n{{ThisDateInRecentYears}}\n{{Day}}\n\n==Events==\n* [[ 456]] – [[Remistus]],罗马将军 (''[[magister militum]]''),在 [[Ravenna]] 拥有 [[Goths|Gothic]] 部队 [[Siege|besiege]]d后来在城外的“in Classis”宫中被处决。\n*[[1111]] – 由 [[Pedro Fr\u00f3ilaz de Traba]] 和主教 [[Diego Gelm\u00edrez]] 领导的加利西亚最高贵族 [[Alfonso VII of Le\u00f3n and Castile|Alfonso VII] ] as \"[[加利西亚王国|加利西亚国王]]\"。\n*[[1176]] – [[Myriokephalon 之战]] 进行了。\n*[[1462]] – [[ \u015awiecino]] 战役(也称为 \u017barnowiec 战役)在 [[十三年战争 (1454\u201366)|十三年战争]] 期间进行。

4

1 回答 1

0
JSONObject pages = new JSONObject(json.getJSONObject("pages"));

// Use this to get IDs
Iterator<String> keys = pages.keys();

// Then iterate
while (keys.hasNext()) {
  JSONObject page = new JSONObject(pages.get(keys.next()));
  // Do something with the page
}
于 2013-04-24T14:11:07.763 回答