116
{
  "key1": "value1",
  "key2": "value2",
  "key3": "value3"
}

How I can get each item's key and value without knowing the key nor value beforehand?

1

5 Answers 5

328

Use the keys() iterator to iterate over all the properties, and call get() for each.

Iterator<String> iter = json.keys();
while (iter.hasNext()) {
    String key = iter.next();
    try {
        Object value = json.get(key);
    } catch (JSONException e) {
        // Something went wrong!
    }
}
Sign up to request clarification or add additional context in comments.

3 Comments

Note: You can't use the short form for (String s: json.keys()) { ... } It's a real shame that neither JSONArray nor JSONObject are iterable. :-(
what is json here? Json Object, Json Array or anthing else?
@PravinsinghWaghela it's a JSONObject as specified in the question
69

Short version of Franci's answer:

for(Iterator<String> iter = json.keys();iter.hasNext();) {
    String key = iter.next();
    ...
}

3 Comments

what is json here? Json Object, Json Array or anthing else?
json is JsonObject
@PravinsinghWaghela pretty sure the OP asked how to loop through a json object.
10

You'll need to use an Iterator to loop through the keys to get their values.

Here's a Kotlin implementation, you will realised that the way I got the string is using optString(), which is expecting a String or a nullable value.

val keys = jsonObject.keys()
while (keys.hasNext()) {
    val key = keys.next()
    val value = targetJson.optString(key)        
}

Comments

3

You shold use the keys() or names() method. keys() will give you an iterator containing all the String property names in the object while names() will give you an array of all key String names.

You can get the JSONObject documentation here

http://developer.android.com/reference/org/json/JSONObject.html

Comments

-2

Take a look at the JSONObject reference:

http://www.json.org/javadoc/org/json/JSONObject.html

Without actually using the object, it looks like using either getNames() or keys() which returns an Iterator is the way to go.

1 Comment

Wrong link. The JSONObject in Android doesn't have getNames(). developer.android.com/reference/org/json/JSONObject.html

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.