skip to Main Content

I have a following JSON:

{"data":["str1", "str2", "str3"]}

I want to get a List, i.e. ["str1", "str2", "str3"]

My code is:

JSONObject json = new JSONObject();
List list = new ArrayList();
...
// adding data in json
...
list = (List) json.get("data");

This is not working.

4

Answers


  1. you can get this data as a JsonArray

    Login or Signup to reply.
  2. You can customize a little bit of code like it

    public static void main(String[] args) throws ParseException {
            String data = "{"data":["str1", "str2", "str3"]}";
            JSONObject json = new JSONObject(
                    data);
             
            JSONArray jasonArray = json.getJSONArray("data");
            List list = new ArrayList();
    
            int size = jasonArray.length();
            int i = 0;
            while (i < size) {
                list.add(jasonArray.get(i));
                i++;
            }
    
            System.out.println(list);
    
        }
    
    Login or Signup to reply.
  3. You wish to parse a JSON string using Java code. It is recommended to use a JSON library for Java. There are several. The below code uses Gson. There are many online examples such as Convert String to JsonObject with Gson. You should also familiarize yourself with the Gson API.

    import com.google.gson.JsonArray;
    import com.google.gson.JsonElement;
    import com.google.gson.JsonObject;
    import com.google.gson.JsonParser;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class JsonList {
    
        public static void main(String[] args) {
            String json = "{"data":["str1", "str2", "str3"]}";
            JsonElement elem = JsonParser.parseString(json);
            if (elem.isJsonObject()) {
                JsonObject obj = elem.getAsJsonObject();
                elem = obj.get("data");
                if (elem.isJsonArray()) {
                    JsonArray arr = elem.getAsJsonArray();
                    List<String> list = new ArrayList<>();
                    int count = arr.size();
                    for (int i = 0; i < count; i++) {
                        elem = arr.get(i);
                        if (elem.isJsonPrimitive()) {
                            String str = elem.getAsString();
                            list.add(str);
                        }
                    }
                    System.out.println(list);
                }
            }
        }
    }
    

    Running the above code gives the following output:

    [str1, str2, str3]
    

    There are other ways to convert the JsonArray to a List. The above is not the only way. As I wrote earlier, peruse the API documentation and search the Internet.

    Login or Signup to reply.
  4. Behind the scenes, the JSONArray object stores the json data in an ArrayList<Object>, and it has a method called toList(). There’s absolutely no need to loop through the JSONArray in order to set values in the array. The simpler code would look something like this

    String data = "{"data":["str1", "str2", "str3"]}";
    JSONObject json = new JSONObject(data);
    
    List<Object> list = json.getJSONArray("data").toList();
    
    System.out.println(myList);
    

    Note: This will create a list of generic Objects. The currently accepted answer doesn’t define a type for the List, which is unsafe. It doesn’t enforce type safety, and errors will occur at runtime instead of at compile time.

    If you want to convert all of the inner objects to a String, you can do this by upcasting the List to an Object, and then casting it to a List<String>. I don’t particularly recommend it, but it can be done like this. List<String> list = (List<String>) (Object) json.getJSONArray("data").toList();.

    A better way of casting the value to a specific type would be via a stream to call the Object.toString() method.

    List<String> list = json.getJSONArray("data").toList().stream().map(Object::toString).collect(Collectors.toList());
    

    or, if you have a specific type you want to cast it to, you can use

    List<MyObject> list = json.getJSONArray("data").toList().stream().map(jsonObject -> (MyObject) jsonObject).collect(Collectors.toList());
    

    Finally, as others have pointed out, there are better libraries for dealing with json. Gson is a great library, however I personally prefer Jackson. They both offer similar resources, but I’ve found that Jackson’s ObjectMapper is more customizable and more widely used.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search