Как проанализировать объект JSON в Android

#android #json

#Android #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 . Если я наведу курсор на json2 в режиме отладки, я смогу увидеть все значения и имена внутри объекта.

Я также пытался

 test = json2.length();
  

Это вернулось test = 0 . Даже при наведении курсора мыши на json2 объект я могу прочитать значения внутри объекта.

Вот пример строки JSON, которую я буду использовать.

 {
    "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 amp; Co. KG",
        "latitude":"52.3956107286487",
        "longitude":"9.56583023071289"
    }
}
  

Комментарии:

1. Приведенный вами пример строки JSON работает, по крайней мере, для меня. У вас тоже возникают проблемы с этой строкой?

2. можете ли вы показать весь код для этого? или, по крайней мере, помогите мне с моей проблемой с jsonobject

Ответ №1:

В конце концов я решил это, используя JSONObject.get вместо JSONObject.getString , а затем приведя test к 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();
    }
}
  

Комментарии:

1. Я столкнулся с той же проблемой и решил ее, следуя вашему подходу. Вы искали / смогли найти объяснение, почему это работает, а getJSONObject — нет?

2. поскольку ваш json является объектом, а не массивом, поэтому вы используете Jsonobject

Ответ №2:

В вашем формате 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 amp; Co. KG"
  

Я думаю, что этого не хватало, и поэтому проблема была решена, пока мы используем JSONTokener ваш подобный ответ.

Ваш ответ очень хорош. Просто я думаю, что добавляю эту информацию, поэтому я ответил

Спасибо

Ответ №3:

Взгляните на http://developer.android.com/reference/org/json/JSONTokener.html

Это может решить вашу проблему.

Комментарии:

1. Я опубликовал обновленный код выше, но у меня все еще та же проблема @Dave G

Ответ №4:

 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.