2014-06-17 204 views
0

我需要解析从YQL获取的json,但是我遇到了麻烦,因为我没有得到我需要的结果。我正在使用简单的json (https://code.google.com/p/json-simple/wiki/DecodingExamples)并试图按照文档。问题是他们展示的例子非常有限(我对json非常陌生)。我想提取数组中的所有内容(Sy,Date,O,H,L,C和V)。在本文档中,他们展示了如何extarct从数组元素;如果JSON对象只是一个数组,但我对顶部的阵列+一些额外的东西:使用java解析json(simplejson)

{"query" 
     {"count":200,"created":"2014-06-17T00:46:43Z","lang":"en-GB","results" 

这是完整的JSON对象,怎么会我只提取数组?

{"query" 
    {"count":200,"created":"2014-06-17T00:46:43Z","lang":"en-GB","results" 
     {"array":[{"Sy":"Y","Date":"2010-03-10","O":"16.51","H":"16.94","L":"16.51","C":"16.79","V":"33088600"}, 
        {"Sy":"Y","Date":"2010-03-09","O":"16.41","H":"16.72","L":"16.40","C":"16.53","V":"20755200"}, 
        {"Sy":"Y","Date":"2010-03-08","O":"16.32","H":"16.61","L":"16.30","C":"16.52","V":"30554000"} 
     ]}}} 

回答

2

我使用https://code.google.com/p/org-json-java/downloads/list

很简单

try{ 
     String json = "JSON source"; 
     JSONObject j = new JSONObject(json); 
     JSONArray arr = j.getJSONObject("query").getJSONObject("results").getJSONArray("array"); 
     for(int i=0; i<arr.length(); i++){ 
      JSONObject obj = arr.getJSONObject(i); 
      String sy = obj.getString("Sy"); 
      String date = obj.getString("Date"); 
      String o = obj.getString("O"); 
      String h = obj.getString("H"); 
      String l = obj.getString("L"); 
      String c = obj.getString("C"); 
      String v = obj.getString("V"); 
     } 
    } 
    catch(JSONException e){ 

    } 
1

你必须一块一块地提取你需要的数组。

JSONParser parser=new JSONParser(); 
String s="{YOUR_JSON_STRING}"; 
JSONArray array=parser.parse(s).get("query") //"query" 
       .get("result") // "query->result" 
       .get("array"); // THE array you need 

请注意,您可能需要使用try...catch...块来处理异常。

由于您使用的是java,我强烈推荐gson,它是由google编写的。它可以将json直接转换为对象,这意味着您不需要逐步深入json的数组。 https://code.google.com/p/google-gson/

一般来说,你可以用jsonparser一块一块地分析json,或者用json将整个json转换成一个对象。

+0

谢谢你的建议,我会看看吧! – user2924127