2015-09-23 25 views
1
for (int i = 0; i < jsonArray.length(); i++){ 
       System.out.println(jsonArray.getJSONObject(i)); 
       System.out.println(jsonArray.getJSONObject(i).names()); 
      } 

将打印对,然后单个对象,如返回键值对的字符串表示JSONArray

{"key1":"a"} 
["key1"] 
{"key2":"b"} 
["key2"] 
{"key3":"c"} 
["key3"] 
{"key4":"d"} 
["key4"] 
... 
{"keyn":"end"} 
["keyn"] 

我想for循环能够抓住的字符串解释键和每个对象的值分开。

我一直在寻找通过JSONObject API,但我似乎无法找到一种方法在那里会做到这一点。这很容易抢值的名称,如果你知道密钥的名称:

jsonObject.getString(whenYouKnowTheKeyName)); 

但是当我通过循环数组我假设我既不知道。我期待得到

key1 
a 
key2 
b 
key3 
c 
key4 
d 
... 

作为输出。我试图从已经创建的JSON对象读取,而不是创建一个新的。

+1

你试过JSONObject的'键和名字'方法吗? – bsingh

+0

可能重复[在JSON中创建键值对字符串](http://stackoverflow.com/questions/16306271/create-key-value-pairs-string-in-json) – michaelsnowden

+0

@michaelsnowden如果我没有弄错,我相信这个问题实际上与那个问题完全相反,而不是一个骗局。 – gla3dr

回答

1

假设在jsonArray对象始终只包含一个键,下面应该打印键和值在每一个对象,你想:

for (int i = 0; i < jsonArray.length(); i++) { 
    JSONObject jsonObject = jsonArray.getJSONObject(i); 
    Iterator<String> keys = jsonObject.keys(); 
    String key = keys.next(); 
    Object value = jsonObject.get(key); 
    System.out.println(key); 
    System.out.println(value); 
} 

但是,您可能要处理所有的所有键对象通过包装在while (keys.hasNext())迭代循环的每个键和值:

for (int i = 0; i < jsonArray.length(); i++) { 
    JSONObject jsonObject = jsonArray.getJSONObject(i); 
    Iterator<String> keys = jsonObject.keys(); 
    while (keys.hasNext()) { 
     String key = keys.next(); 
     Object value = jsonObject.get(key); 
     System.out.println(key); 
     System.out.println(value); 
    } 
} 

你的榜样,这两种解决方案具有相同的输出,但显然后者更灵活。