Попытка разобрать 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). Я понятия не имею, почему это не работает.



Может кто-нибудь дать мне подсказку, учебник или пример?



Очень признателен !

554   6  

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

    Ничего не найдено.