#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.