2017-03-02 72 views
3
JSONArray arr = 
[ 
    {"key1":"value1"}, 
    {"key2":"value2"}, 
    {"key3":"value3"}, 
    {"key4":"value4"} 
] 

arr.get("key1")抛出错误。如何通过JSONArray中的密钥获取价值?通过键获得价值jsonarray

arr.getString("key1")也会报错。我应该循环访问数组吗?这是唯一的方法吗?

什么是错误?

在Eclipse Debug透视图中,这些表达式返回为; error(s)_during_the_evaluation

+0

http://stackoverflow.com/questions/1568762/accessing-members-of-items-in-a-jsonarray-with-java –

+0

这不是有效的Java。但无论如何,这是一个JSON *数组*。所以你需要在数组中找到* index所需的元素。这是一个对象。该对象具有键和值。 –

+0

'arr.getJSONObject(0).getString(“key1”)'返回我想要的。实际上,不是循环遍历数组,我想要像在js中那样获取“arr.key1”的值。但我想我应该循环遍历数组来找到索引,对吗? – mmu36478

回答

6

您可以分析您的jsonResponse像下面的代码:

private void parseJsonData(String jsonResponse){ 
     try 
     { 
      JSONArray jsonArray = new JSONArray(jsonResponse); 

      for(int i=0;i<jsonArray.length();i++) 
      { 
       JSONObject jsonObject1 = jsonArray.getJSONObject(i); 
       String value1 = jsonObject1.optString("key1"); 
       String value2 = jsonObject1.optString("key2"); 
       String value3 = jsonObject1.optString("key3"); 
       String value4 = jsonObject1.optString("key4"); 
      } 
     } 
     catch (JSONException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
2
for (int i = 0; i < arr.length(); ++i) { 

    JSONObject jsn = arr.getJSONObject(i); 

    String keyVal = jsn.getString("key1"); 
} 

您需要通过阵列来获得每个JSONObject的迭代。一旦你有json的对象,你可以通过使用keys

2

得到values听起来就像你想从一个JSONObjects数组中找到一个特定的键。问题是,它是一个数组,所以你必须迭代每个元素。一种解决方案,假设没有重复密钥是...

private Object getKey(JSONArray array, String key) 
{ 
    Object value = null; 
    for (int i = 0; i < array.length(); i++) 
    { 
     JSONObject item = array.getJSONObject(i); 
     if (item.keySet().contains(key)) 
     { 
      value = item.get(key); 
      break; 
     } 
    } 

    return value; 
} 

现在,假设您想要在数组中找到“key1”的值。您可以使用以下行获取值:String value = (String) getKey(array, "key1")。我们投射到一个字符串,因为我们知道“key1”是指一个字符串对象。

-1

你可以很容易通过按键得到了JSON数组元素是这样的:

var value = ArrName['key_1']; //<- ArrName is the name of your array 
console.log(value); 

或者你也可以这样做:

var value = ArrName.key_1; 

这就是它!

+0

这绝对不行。 –

+0

这不是Java。 – Henry