繁体   English   中英

Java-JSONObject仅解析1个字符串?

[英]Java - JSONObject Parsing only 1 string?

我对Java中的JSON解析是相当陌生的,但是当我尝试解析此JSON字符串并发现它是“ ID”时,它会重复相同的代码两次。

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

这是我的Java代码:

        // 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);

它返回ID1两次或更多次。 请帮忙

您的JSON代表一个数组-因此,您应该使用它来解析它。 然后,您可以轻松地从数组中的每个JSONObject获取id属性。 例如:

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"));
        }
    }
}

输出:

{ID1}
{ID2}

我通过将其用作JSONArray来修复了我的代码(感谢@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);
            }

尝试这个 :

// 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));
}

首先为您的json创建一个Java bean(例如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;
    }

}

如果您使用的是Jackson Java JSON处理器,则可以通过以下方式从JSON-String创建列表:

    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();
    }

使用以下代码

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();
        }

请注意,我也稍微纠正了json结构

[{{id“:” {ID1}“,” time“:123},{” id“:” {ID2}“,” time“:124}]之前

[{“ id”:“ ID1”,“ time”:123},{“ id”:“ ID2”,“ time”:124}之后

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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