2012-12-27 81 views
0

在java中,我试图从这个JSON解析值的特定值..解析JSON字符串使用的JSONObject

[ 
{ 
    "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并传递这个新字符串,从中提取年龄还是有更好的方法来做到这一点? (我相信有一个)

UPDATE:

这是我现在有这给了我{ “时代”:3, “出生日期”: “2012-01-06”,“姓名“:” 米朗 “}

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,” 出生日期 “:” 2012-01-06" , “姓名”: “米朗”},我会创建另一个json对象并传入此字符串,这会给我“年龄”的价值。这里的问题是我得到重复的价值。当然,这里缺少一些非常基本的东西,但我似乎无法弄清楚。

回答

2

如果你有内部元件为JSONObject实例 - 说person - 那么你可以直接访问年龄:

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

,并用它做什么:

sum += age; 
+0

1为了简单起见,而不是推荐另一API:d – micha

+0

@micha除了误差org.json检查无外乎是一个PITA。试试看吧...... – fge

+0

我明白了......所以,以下是我到目前为止: – JSX

0

你可以考虑像谷歌的GSON(http://code.google.com/p/google-gson/)这样的库,如果你想能够轻松地将复杂的JSON strnigs解析为通用对象。

+0

对不起,但要求是我必须使用JSONObject – JSX

0

使用org.json可能不是你最好的选择 - 这个API有很多缺陷。使用杰克逊,可以容易地提取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()