使用java(simplejson)解析json

时间:2014-06-17 01:15:06

标签: java json parsing yql

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

{"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 个答案:

答案 0 :(得分: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 :(得分: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,它是由谷歌编写的。它可以直接将json转换为对象,这意味着您不需要逐步将数组深入到json内部。 https://code.google.com/p/google-gson/

一般来说,你可以使用gson与jsonparser一块一块地解析json,或者将整个json转换为带有gson的对象。