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を作成してこの新しい文字列を渡し、そこから年齢を抽出しますか、それともこれを行うためのより良い方法がありますか?(確かに1つあります)

アップデート:

これは私が現在持っているもので、{"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

任意に複雑なJSONstrnigをジェネリックオブジェクトに簡単に解析できるようにしたい場合は、GoogleのGSON(http://code.google.com/p/google-gson/)のようなライブラリを検討することをお勧めします。

于 2012-12-27T20:59:49.783 に答える
0

org.jsonを使用することは、おそらく最善の策ではありません。このAPIには多くの欠陥があります。ageJacksonを使用すると、各メンバーの値から簡単に抽出できます。

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 に答える