访问多级JSON结构中的值

时间:2013-11-19 19:33:01

标签: java json json-simple

有我的JSON结构:

{
   "date":"19.11.2013",
   "parent":{
      "child1":[
         {
            "date":"2013-11-19",
            "time":"10:30",
         },
         {
            "date":"2013-11-19",
            "time":"12:20",
         }
      ],
      "child2":[
         {
            "date":"2013-11-19",
            "time":"10:30",
         },
         {
            "date":"2013-11-19",
            "time":"12:20",
         }
      ]
   }
}

目前这是我的代码:

public class json {
    public static void main(String[] args) throws IOException, ParseException {

        URL urlData = new URL("http://path.to/json");
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                urlData.openConnection().getInputStream(), "utf-8"));
        String struct = reader.readLine();

        JSONParser parser = new JSONParser();
        Object obj = parser.parse(struct);
        JSONObject lev1 = (JSONObject) obj;
        System.out.println(lev1.get("date"));
    }
}

我有一个日期值( 19.11.2013 ),但我不知道如何获取孩子的 date 和<的值EM>时间。 我正在使用json-simple库。

2 个答案:

答案 0 :(得分:4)

这是一个想法:

JSONObject parent = (JSONObject) lev1.get("parent");
JSONArray child1 = (JSONArray) parent.get("child1"); // same for child2
for (Object elem : child1) {
    System.out.prinlnt("date =  " + ((JSONObject) elem).get("date"));
    System.out.prinlnt("time =  " + ((JSONObject) elem).get("time"));
}

如果它不编译,请告诉我,否则应该有效。

答案 1 :(得分:1)

因为,数组的名称是child1child2(这意味着名称不同),在父对象内,首先必须获取这些名称,然后对于每个数组,获取日期和时间。

这里struct是jsonString:

        JSONParser parser = new JSONParser();
        Object obj = parser.parse(struct);
        JSONObject lev1 = (JSONObject) obj;
        Object jObj = lev1.get("parent");
        List keys = new ArrayList();
        if (jObj instanceof Map) {
            Map map = (Map) jObj;
            Set keySet = map.keySet();
            for (Object s : keySet) {
                JSONObject jsonObj = (JSONObject) jObj;
                JSONArray jarr = (JSONArray) jsonObj.get(s.toString());
                for (int i = 0; i < jarr.size(); i++) {
                    Object get = jarr.get(i);
                    JSONObject job = (JSONObject) get;
                    String date = job.get("date").toString();
                    String time = job.get("time").toString();
                    System.out.println("Date: " + date + " , Time: " + time);
                }
            }
        }