有我的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库。
答案 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)
因为,数组的名称是child1
和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);
}
}
}