在java中,我试图从这个json中解析值..
[
{
"2012-01-02": {
"age": 3,
"dob": "2010-01-03",
"name": "jack"
},
"2012-01-03": {
"age": 3,
"dob": "2010-01-04",
"name": "jill"
},
"2012-01-04": {
"age": 3,
"dob": "2010-01-05",
"name": "john"
},
"2012-01-05": {
"age": 3,
"dob": "2010-01-06",
"name": "miran"
}
}
]
使用JSONObject,我试图获得“age”的值,然后将它们加起来进行一些数据操作。
这让我得到了内在的元素:
{
"age": 3,
"dob": "2010-01-06",
"name": "miran"
}
在此之后,不确定如何从每个元素中提取年龄。我是否创建另一个jsonobject并传递这个新字符串,从中提取年龄或者有更好的方法吗? (我相信有一个)
更新
这是我现在拥有的{{年龄':3,“dob”:“2012-01-06”,“name”:“miran”}
JSONObject jsonobj = new JSONObject();
try {
jsonobj = new JSONObject(pastweekVol);
Iterator iter = jsonobj.keys();
Map<String, String> map = new HashMap<String, String>();
while(iter.hasNext()){
String jsonkey = (String)iter.next();
String value = jsonobj.getString(jsonkey);
logger.debug("first pass value is: {}", value);
} catch (JSONException je) {
logger.debug("exception is: {}",je);
}
我在想,因为我得到{“年龄”:3,“dob”:“2012-01-06”,“name”:“miran”},我会创建另一个json对象并传入此字符串,这将给我“年龄”的价值。这里的问题是我得到重复的价值观。当然,这里缺少一些非常基本的东西,但我似乎无法弄明白。
答案 0 :(得分:2)
如果您将内部元素作为JSONObject
实例 - 比如person
- 那么您可以直接访问该年龄:
int age = person.getInt("age");
并用它做点什么:
sum += age;
答案 1 :(得分:0)
如果您希望能够轻松地将任意复杂的JSON strnigs解析为通用对象,则可以考虑使用Google的GSON(http://code.google.com/p/google-gson/)这样的库。
答案 2 :(得分:0)
使用org.json可能不是你最好的选择 - 这个API有很多缺陷。使用Jackson,您可以轻松地从每个成员值中提取age
:
ObjectMapper mapper = new ObjectMapper();
JsonNode fullDocument = mapper.readTree(xxx); // xxx can be many things
// Not an object? Bail out
if (!fullDocument.isObject())
throw new IllegalArgumentException("not an object");
// This will iterate through object values
for (JsonNode value: fullDocument)
// do something with value.get("age")
// in particular, you can test for .isIntegralNumber()