简体   繁体   中英

Java - JSONObject Parsing only 1 string?

I'm fairly new to JSON parsing in Java but when I try and parse this JSON String & find out it's "ID", it repeats the same one twice.

[
  {"id":"{ID1}","time":123},
  {"id":"{ID2}","time":124}
]

This is my Java code:

        // v = json string, c = "id"
        String output = v.replace("[", "").replace("]", "");  
        JSONObject obj = new JSONObject(output);
        ArrayList<String> list = new ArrayList<String>();

        for(int i = 0 ; i < obj.length(); i++){
            System.out.println(obj.getString(c));
            list.add(obj.getString(c));
        }

        return list.get(1);

it returns ID1 twice or more. Please help

Your JSON represents an array - so that's how you should parse it. You can then easily get the id property from each JSONObject within the array. For example:

import org.json.*;

public class Test {
    public static void main(String[] args) throws JSONException {
        String json = 
            "[{\"id\":\"{ID1}\",\"time\":123}, {\"id\":\"{ID2}\",\"time\":124}]";
        JSONArray array = new JSONArray(json);

        for (int i = 0; i < array.length(); i++) {
            JSONObject o = array.getJSONObject(i);
            System.out.println(o.getString("id"));
        }
    }
}

Output:

{ID1}
{ID2}

I fixed my code by using it as a JSONArray(Thanks @HotLicks)

JSONArray obj = new JSONArray(v);
            ArrayList<String> list = new ArrayList<String>();

            for(int i = 0 ; i < obj.length(); i++){
                Logger.WriteOutput(obj.getJSONObject(i).getString(c), Logger.LogLevel.Info);
            }

Try this :

// This line is useless
// String output = v.replace("[", "").replace("]", "");
JSONArray arr = new JSONArray(output);
ArrayList<String> list = new ArrayList<String>();
for(int i = 0 ; i < arr.length(); i++){
    System.out.println(arr.getJSONObject(i).getString(c));
    list.add(arr.getJSONObject(i).getString(c));
}

First create a java bean for your json (for example here ):

public class Item {

    @JsonProperty("id")
    private String  id;
    @JsonProperty("time")
    private Integer time;

    public final String getId() {
        return id;
    }

    public final void setId(String id) {
        this.id = id;
    }

    public final Integer getTime() {
        return time;
    }

    public final void setTime(Integer time) {
        this.time = time;
    }

}

If you are using Jackson Java JSON-processor, you can create a List from JSON-String this way:

    ObjectMapper objectMapper = new ObjectMapper();

    try {
        List<Item> items = objectMapper.readValue(
                    yourJSONString, 
                    objectMapper.getTypeFactory().constructCollectionType(List.class, Item.class));

        for (Item item : items) {
            System.out.println(item.getId());
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

use below code

String v = "[{\"id\":\"ID1\",\"time\":123},{\"id\":\"ID2\",\"time\":124}]";
        String c = "id";
        JSONArray obj = null;
        try {
            obj = new JSONArray(v);

            ArrayList<String> list = new ArrayList<String>();

            for (int i = 0; i < obj.length(); i++) {
                JSONObject j = (JSONObject) obj.get(i);
                System.out.println(j.getString(c));
                list.add(j.getString(c));
            }

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

note that i have slightly corrected the json structure too

before [ {"id":"{ID1}","time":123}, {"id":"{ID2}","time":124} ]

after [ {"id":"ID1","time":123}, {"id":"ID2","time":124} ]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM