如何parsingAndroid中的JSON对象

我有一些问题从一个JSON对象拉值。 这是我的代码

try { JSONObject json = new JSONObject(result); JSONObject json2 = json.getJSONObject("results"); test = json2.getString("name"); } catch (JSONException e) { e.printStackTrace(); } 

test被声明为一个String 。 代码运行时显示为null 。 如果我将鼠标hover在debugging模式下的json2 ,我可以看到对象中的所有值和名称。

我也试过了

 test = json2.length(); 

这返回test = 0 。 即使当我将鼠标hover在json2对象上时,也可以读取对象内的值。

这里是一个我将使用的JSONstring的例子。

 { "caller":"getPoiById", "results": { "indexForPhone":0, "indexForEmail":"NULL", "indexForHomePage":"NULL", "indexForComment":"NULL", "phone":"05137-930 68", "cleanPhone":"0513793068", "internetAccess":"2", "overnightStay":"2", "wasteDisposal":"2", "toilet":"2", "electricity":"2", "cran":"2", "slipway":"2", "camping":"2", "freshWater":"2", "fieldNamesWithValue":["phone"], "fieldNameTranslations": ["Telefon"], "id":"1470", "name":"Marina Rasche Werft GmbH & Co. KG", "latitude":"52.3956107286487", "longitude":"9.56583023071289" } } 

  • 从JSON对象中的字节数组中获取图像到android应用程序
  • 如何使用JSON发布数据到Web服务?
  • 带有不同对象types的数组的Gson Parse Json
  • .execute无法解析为一个types--AsyncTask(Android)
  • 如何在android中解析JSONArray
  • JSONObject中的JSONObject
  • @IdefDef Android支持annonation与杰森反序列化
  • caching图像并显示
  • 最后,我通过使用JSONObject.get而不是JSONObject.getString来解决它,然后将test JSONObject.getString转换为String

     private void saveData(String result) { try { JSONObject json= (JSONObject) new JSONTokener(result).nextValue(); JSONObject json2 = json.getJSONObject("results"); test = (String) json2.get("name"); } catch (JSONException e) { e.printStackTrace(); } } 

    在你的JSON格式中,它没有启动JSON对象

    喜欢 :

     { "info" : <!-- this is starting JSON object --> { "caller":"getPoiById", "results": { "indexForPhone":0, "indexForEmail":"NULL", . . } } } 

    以上Json以info作为JSON对象开始。 所以在执行时:

     JSONObject json = new JSONObject(result); // create JSON obj from string JSONObject json2 = json.getJSONObject("info"); // this will return correct 

    现在,我们可以访问result字段:

     JSONObject jsonResult = json2.getJSONObject("results"); test = json2.getString("name"); // returns "Marina Rasche Werft GmbH & Co. KG" 

    我认为这是失踪,所以这个问题解决了,而我们使用JSONTokener像你的答案。

    你的回答非常好。 只是我想我添加这个信息,所以我回答

    谢谢

     JSONArray jsonArray = new JSONArray(yourJsonString); for (int i = 0; i < jsonArray.length(); i++) { JSONObject obj1 = jsonArray.getJSONObject(i); JSONArray results = patient.getJSONArray("results"); String indexForPhone = patientProfile.getJSONObject(0).getString("indexForPhone")); } 

    更改为JSONArray,然后转换为JSONObject。