-2

如何在 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
4

2 回答 2

7

您的 JSON 的结构是错误的,您应该使用第二个 Key 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 是否有效

个人而言,我更喜欢第二种方式(使用 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");
    }
于 2013-09-27T11:25:56.417 回答
1

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

请检查您的 JSON 的有效性。

希望它可能会有所帮助。

于 2013-09-27T11:39:08.830 回答