0

在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,我试图获取“年龄”的值,然后将它们相加以进行一些数据操作。

  • 我创建了一个 JSONObject
  • 创建了一个迭代器,然后将它们存储到地图中
  • 这让我得到了内部元素,例如:

    {
        "age": 3,
        "dob": "2010-01-06",
        "name": "miran"
    }
    

在此之后,不确定如何从每个元素中提取年龄。我是创建另一个 jsonobject 并传递这个新字符串,从中提取年龄还是有更好的方法来做到这一点?(我确定有一个)

更新:

这就是我目前拥有的 {"age":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);
             }

我在想,既然我得到 {"age":3,"dob":"2012-01-06","name":"miran"},我会创建另一个 json 对象并传入这个字符串,这将给我“年龄”的价值。这里的问题是我得到重复的值。当然,这里缺少一些非常基本的东西,但我似乎无法弄清楚。

4

3 回答 3

2

如果您将内部元素作为JSONObject实例 - 比如说person- 那么您可以直接访问年龄:

int age = person.getInt("age");

并用它做点什么:

sum += age;
于 2012-12-27T20:58:47.347 回答
0

如果您希望能够轻松地将任意复杂的 JSON 字符串解析为通用对象,您可以考虑使用像 Google 的 GSON (http://code.google.com/p/google-gson/) 这样的库。

于 2012-12-27T20:59:49.783 回答
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()
于 2012-12-27T21:00:14.177 回答