如何通过密钥从JSON对象获取值?

时间:2013-09-27 11:20:58

标签: android json

如何通过JSON对象中的键获取值?我使用了以下代码,但收到了"org.json.JSONException"。感谢任何帮助。

String resultJSON = "{Data:[{\"AreaID\":\"13\", \"Phone\":\"654321\", \"RegionName\":\"Sivakasi\"}, {\"AreaID\":\"14\", \"Phone\":\"12345\", \"RegionName\":\"ANJAC\"}]}";
                 JSONObject jObject  = new JSONObject(resultJSON);
                    JSONObject  jsonObject = jObject.getJSONObject("Data");


Map<String,String> map = new HashMap<String,String>();
            Iterator iter = jsonObject.keys();
            while(iter.hasNext()){
                String key = (String)iter.next();
                String value = jsonObject.getString(key);
                map.put(key,value);
                Log.d("Key Value","key: "+key+" Value: "+value);
            }

Logcat详细信息

   org.json.JSONException: Value [{"AreaID":"13","Phone":"654321","RegionName":"Sivakasi"},{"AreaID":"14","Phone":"12345","RegionName":"ANJAC"}] at Data of type org.json.JSONArray cannot be converted to JSONObject

2 个答案:

答案 0 :(得分:6)

您的JSON结构错误,您应该使用第二个JSONObject的密钥,如下所示:

{
    Data: {
        \"AreaID\": \"13\",
        \"Phone\": \"654321\",
        \"RegionName\": \"Sivakasi\"
    },
    \"KEY\": {
        \"AreaID\": \"14\",
        \"Phone\": \"12345\",
        \"RegionName\": \"ANJAC\"
    }
}

或者DATA应该是JSONArray(由[]包围),如下所示:

{
    Data: [
        {
            \"AreaID\": \"13\",
            \"Phone\": \"654321\",
            \"RegionName\": \"Sivakasi\"
        },
        {
            \"AreaID\": \"14\",
            \"Phone\": \"12345\",
            \"RegionName\": \"ANJAC\"
        }
    ]
}

注意:您可以检查您的json是否有效here

Personnaly,我更喜欢第二种方式(使用JSONArray),因为里面的数据具有相同的属性(AreaID,Phone,REgionName)。要解析这种情况下的数据,您的代码应该是这样的:

String resultJSON = "{Data:[{\"AreaID\":\"13\", \"Phone\":\"654321\", \"RegionName\":\"Sivakasi\"}, {\"AreaID\":\"14\", \"Phone\":\"12345\", \"RegionName\":\"ANJAC\"}]}";
                 JSONObject jsonRoot  = new JSONObject(resultJSON);
                    JSONArray  jsonData = jsonRoot.getJSONArray("Data");
    for(int i=0; i<jsonData.lenght;i++) {
        JSONObject jsonOBject = jsonData.getJSONObject(i);
        Log.d(TAG, "json ("+i+") = "+jsonOBject.toString());
        // do what you want with your JSONObject , i.e :add it to an ArrayList of paresed result
        String areaID = jsonOBject.getString("AreaID");
        int phoneNumber = jsonOBject.getInt("Phone");
        String regionName = jsonOBject.getString("RegionName");
    }

答案 1 :(得分:1)

这是无效的JSON格式。在将字符串转换为JSON对象格式之前,请确保它是否有效。

请检查您的JSON的有效性。

希望它可能会有所帮助。