Нужна помощь в форматировании массива JSON
У меня есть этот массив для моего веб-сервиса: {"update":true,"msg":"Logged in Bro","role":"admin"}
Теперь мне нужно использовать это в Android, чтобы обойти мое приложение после входа в систему. Так что мне здесь нужен способ форматирования этих данных в namevaluepairs или отдельные переменные, чтобы я мог их использовать.
Я в настоящее время использую это, но это принудительно закрывает мое приложение:
try {
JSONObject jsonRootObject = new JSONObject(result);
//Get the instance of JSONArray that contains JSONObjects
JSONArray jsonArray = jsonRootObject.optJSONArray("");
//Iterate the jsonArray and print the info of JSONObjects
for(int i=0; i < jsonArray.length(); i++){
JSONObject jsonObject = jsonArray.getJSONObject(i);
update = jsonObject.optString(jsonObject.optString("update").toString());
message = jsonObject.optString("msg").toString();
role = jsonObject.optString(jsonObject.optString("role").toString());
}
} catch (JSONException e) {e.printStackTrace();}
2 ответа
Для анализа предоставленного вами JSON вам нужно что-то вроде этого:
JSONObject jsonObject = new JSONObject(jsonString);
update = jsonObject.optBoolean("update");
message = jsonObject.optString("msg");
role = jsonObject.optString("role");
Я предполагаю result
содержит ваш JSON как String
:
{"update":true,"msg":"Logged in Bro","role":"admin"}
Следовательно,
JSONObject jsonRootObject = new JSONObject(result);
создает объект JSON с тремя свойствами, update
, msg
а также role
, Вы можете получить к ним доступ следующим образом:
boolean update = jsonRootObject.optBoolean("update");
String msg = jsonRootObject.optString("msg");
String role = jsonObject.optString("role");
Ваш код падает на jsonArray.length()
так как jsonArray == null
: jsonRootObject.optJSONArray("");
возвращается null
так как нет массива с ключом ""
в вашем объекте.
optString("msg").toString();
нелогично само по себе. optString
либо возвращает String
или же null
, Ваш код не работает, если свойство msg
нет Если вы ожидаете, что недвижимость будет присутствовать, используйте getString
вместо optString
, В общем, не звоните toString()
на String
s.
jsonObject.optString(jsonObject.optString("role").toString());
тоже не имеет смысла. В вашем объекте нет ключа, равного значению свойства role
,