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

Sak*_*iah -2 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);
            }
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

Hou*_*ine 6

你的JSON的结构是错误的,你应该使用第二个键JSONObject,如下所示:

{
    Data: {
        \"AreaID\": \"13\",
        \"Phone\": \"654321\",
        \"RegionName\": \"Sivakasi\"
    },
    \"KEY\": {
        \"AreaID\": \"14\",
        \"Phone\": \"12345\",
        \"RegionName\": \"ANJAC\"
    }
}
Run Code Online (Sandbox Code Playgroud)

或者DATA应该是JSONArray(包围[])像这样:

{
    Data: [
        {
            \"AreaID\": \"13\",
            \"Phone\": \"654321\",
            \"RegionName\": \"Sivakasi\"
        },
        {
            \"AreaID\": \"14\",
            \"Phone\": \"12345\",
            \"RegionName\": \"ANJAC\"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

注意:您可以检查,如果你的JSON是有效还是无效点击这里

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");
    }
Run Code Online (Sandbox Code Playgroud)