java—如何通过json数组进行迭代并返回每个值

ut6juiuv  于 2021-08-20  发布在  Java
关注(0)|答案(3)|浏览(306)

我有一个包含json对象数组的json文件:

[{"id":"939f0080-e93e-4245-80d3-3ac58a4a4335","name":"Micha","date":"2021-04-20T11:21:48.000Z","entry":"Wow"}, {"id":"939f0070-e93f-4235-80d3-3ac58a4a4324","name":"Sarah","date":"2021-04-21T11:21:48.000Z","entry":"Hi"}, {"id":"897f0080-e93e-4235-80d3-3ac58a4a4324","name":"John","date":"2021-04-25T17:11:48.000Z","entry":"Hi how are you"}...]

我使用json simple来获取数组,但我只能获取对象,而不能获取值。

JSONParser jsonParser = new JSONParser();

        try {
            FileReader reader = new FileReader("j.json");
            Object object = jsonParser.parse(reader);
            JSONArray jsonArray = (JSONArray) object;
            //prints the first Object
            System.out.println("element 1 is" +  jsonArray.get(0));

            //prints whole Array
            System.out.println(jsonArray);

如何通过文件进行迭代,并获得每个日期、名称日期和条目的值,而不是对象的值?
我想得到这样的东西:

"id is 939f0080-e93e-4245-80d3-3ac58a4a4335 name is Micha date is 2021-04-20T11:21:48.000Z enry is wow"
"id is 939f0070-e93f-4235-80d3-3ac58a4a4324 name is Sarah 2021-04-21T11:21:48.000Z date is 2021-04-21T11:21:48.000Z"
"name is ..."
b1zrtrql

b1zrtrql1#

你想要的基本上就是这个

public static void main(String[] args) {
        JSONParser jsonParser = new JSONParser();

        try (FileReader reader = new FileReader("j.json")) {
            Object object = jsonParser.parse(reader);
            JSONArray jsonArray = (JSONArray) object;
            for (Object o : jsonArray) {
                JSONObject jsonObject = (JSONObject) o;
                System.out.printf("id is %s name is %s date is %s entry is %s%n", jsonObject.get("id"), jsonObject.get("name"), jsonObject.get("date"), jsonObject.get("entry"));

                // Or if you want all
                for (Object key : jsonObject.keySet()) {
                    System.out.printf("%s is %s", key, jsonObject.get(key));
                }
                System.out.println();
            }
        } catch (IOException | ParseException e) {
            e.printStackTrace();
        }
    }

你可以用 getOrDefault 如果属性是可选的。还有无数其他库可以将json转换为java对象。这将给你更多的类型安全。例如 jacksongson .

ruarlubt

ruarlubt2#

jsonarray实现了集合和iterable,因此您可以使用for循环或迭代器或流对其进行迭代。遗憾的是,对象不是泛型类型的,因此您将始终获得对象,并且必须自己强制转换它们:

for(Object value : jsonArray) {
   // your code here //
}
kkbh8khc

kkbh8khc3#

希望这有助于:

JSONParser jsonParser = new JSONParser();

try {
    Object object = jsonParser.parse("[{\"id\":\"939f0080-e93e-4245-80d3-3ac58a4a4335\",\"name\":\"Micha\",\"date\":\"2021-04-20T11:21:48.000Z\",\"entry\":\"Wow\"}, {\"id\":\"939f0070-e93f-4235-80d3-3ac58a4a4324\",\"name\":\"Sarah\",\"date\":\"2021-04-21T11:21:48.000Z\",\"entry\":\"Hi\"}, {\"id\":\"897f0080-e93e-4235-80d3-3ac58a4a4324\",\"name\":\"John\",\"date\":\"2021-04-25T17:11:48.000Z\",\"entry\":\"Hi how are you\"}]");
    JSONArray jsonArray = (JSONArray) object;

    jsonArray.forEach(x -> {
        JSONObject o = (JSONObject) x;
        String collect = o.entrySet()
                .stream()
                .map(e -> e.getKey() + " is " + e.getValue().toString())
                .collect(Collectors.joining(" "));
        System.out.println(collect);
    });
} catch (ParseException e) {
    e.printStackTrace();
}

相关问题