Попытка разобрать JSON в Android
Как бы вы предложили мне разобрать этот JSON:
{"17": {"user_name": "test1"}, "18": {"user_name": "test5"}, "19": {"user_name": "test9"}}
Мне нужно получить "имя пользователя", но я не могу найти способ сделать это. Возможно, мне следует изменить JSON на что-то вроде этого:
[{"user_name": "test1"},{"user_name": "test5"},{"user_name": "test9"}]
Таким образом, я попытался получить"user_name" s:
try {
List<String> allNames = new ArrayList<String>();
String str = "[{"user_name": "test1"},{"user_name": "test5"},{"user_name": "test9"}]";
JSONObject json = new JSONObject(str);
for ( int i = 0; i < json.length() ; i++)
{
JSONObject actor = json.getJSONObject(i);
String user_name = actor.getString("user_name");
allNames.add(user_name);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Но тогда я получаю проблему с этой строкой:
JSONObject actor = json.getJSONObject(i);
Android studio сообщает мне, что JSONObject не может быть применен к int(i). Я понятия не имею, почему это не работает.
Может кто-нибудь дать мне подсказку, учебник или пример?
Очень признателен !
6 ответов:
Метод
JSONObject.getJSONObjectтребуется аргументString(имя или ключ объекта), а неint. В вашем случае ключами являются:"17","18"и"19". Чтобы получить все ключи, используйтеJSONObject.keys()метод:JSONObject json = new JSONObject(str); Iterator<String> keyIterator = json.keys(); while (keyIterator.hasNext()) { JSONObject actor = json.getJSONObject(keyIterator.next()); String user_name = actor.getString("user_name"); allNames.add(user_name); }
Android studio говорит мне, что JSONObject не может быть применен к int (i)
Потому что
JSONObject.getJSONObjectметод принимает имя ключа какStringвместоint. и ключи в размещенной JSON является17,18,...чтобы открыть внутреннийJSONObject.Чтобы получить все
user_nameиз JSONObject, нужно получить все ключи:Iterator<String> iter = json.keys(); while (iter.hasNext()) { String key = iter.next(); JSONObject actor = json.getJSONObject(key); String user_name = actor.getString("user_name"); allNames.add(user_name); }
Измените код следующим образом
try { List<String> allNames = new ArrayList<String>(); String str = "[{"user_name": "test1"},{"user_name": "test5"},{"user_name": "test9"}]"; JSONOArray jsonArray = new JSONOArray(str); for ( int i = 0; i < jsonArray .length() ; i++) { JSONObject actor = jsonArray.getJSONObject(i); String user_name = actor.getString("user_name"); allNames.add(user_name); } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); }
Если вы используете библиотеку Gson, это очень просто.
String json = "{\"17\": {\"user_name\": \"test1\"}, \"18\": {\"user_name\": \"test5\"}, \"19\": {\"user_name\": \"test9\"}}"; Gson gson = new GsonBuilder().create(); Map<String,User> users = gson.fromJson(json, new TypeToken<Map<String,User> >(){}.getType()); for(String key : users.keySet()) { Log.d("DEBUG",key+" -> "+users.get(key).getUser_name()); }Класс пользователя-это простой POJO, такой как:
Пользователь открытого класса {
private String user_name; public String getUser_name() { return user_name; } public void setUser_name(String user_name) { this.user_name = user_name; }}
str = {"17": {"user_name": "test1"}, "18": {"user_name": "test5"}, "19": {"user_name": "test9"}} JSONObject ob1 = new JSONObject(str) JSONObject ob2 = ob1.getJSONObject("17"); String userName = ob2.getString("user_name"); str = [{"user_name": "test1"},{"user_name": "test5"},{"user_name": "test9"}] List<String> allNames = new ArrayList<String>(); JSONArray jsonArray = new JSONArray("str"); for(i=0; i < jsonArray.length(); i++){ JSONObject ob = jsonArray.getJSONObject(i); allNames.add(ob.getString("user_name") }
Вы пытаетесь разобрать
JSONArrayнаJSONObjectвJSONObject json = new JSONObject(str);Используйте приведенный ниже код.....
try { List<String> allNames = new ArrayList<String>(); String str = "[{"user_name": "test1"},{"user_name": "test5"},{"user_name": "test9"}]"; JSONArray json = new JSONArray(str); for ( int i = 0; i < json.length() ; i++) { JSONObject actor = json.getJSONObject(i); String user_name = actor.getString("user_name"); allNames.add(user_name); } } catch (JSONException e) { // TODO Auto-generated catch block`enter code here` e.printStackTrace(); }
Comments