1

有我的 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),但我不知道如何获取孩子的日期时间值。我正在使用 json-simple 库。

4

2 回答 2

5

这是想法:

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

让我知道它是否无法编译,否则应该可以。

于 2013-11-19T20:14:07.173 回答
1

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

这里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);
                }
            }
        }
于 2013-11-20T05:00:41.267 回答