gson 从资源中阅读JSON文件并在Java中创建对象列表

vwkv1x7d  于 2022-11-06  发布在  Java
关注(0)|答案(3)|浏览(167)

基本上,我有下面的JSON文件,我需要读取他,并添加到Java中的对象列表中,在这种情况下,我应该使用哪个库?我最大的困难是读取Json开始的数组,而不是一个普通的对象,并在第一个数组的元素内尝试读取其他数组内.

[
 {
  "name: "Andrew",
  "age": 21, 
  "parents": [
   {
    "name": "Joseph",
    "age": 18
   },
   {
    "name": "Joseph",
    "age": 18
   }
  ]
 },
{
  "name: "Maria",
  "age": 35, 
  "parents": [
   {
    "name": "Kassandra",
    "age": 16
   },
   {
    "name": "Abigail",
    "age": 22
   }
  ]
 }
]

[EDIT 2022年11月6日]
我创建了这个github要点下面的答案这个问题,谢谢大家的帮助,我很感激。
答案:https://gist.github.com/guigonzalezz/fcd8724ce0075efcb486763c067565c2

1dkrff03

1dkrff031#

有很多API和库,但我更喜欢使用www.example.com建议的org.json APIjson.org
您还可以使用GSON库,它是将Java对象序列化到JSON和从JSON反序列化Java对象的最佳库之一。
下面是使用org.jsonAPI阅读上述JSON的快速演示。

import org.json.JSONObject;
import org.json.JSONArray;

public class HelloWorld {
    public static void main(String[] args) {
        String jsonString = "[ { \"name\": \"Andrew\", \"age\": 21, \"parents\": [ { \"name\": \"Joseph\", \"age\": 18 }, { \"name\": \"Joseph\", \"age\": 18 } ] }, { \"name\": \"Maria\", \"age\": 35, \"parents\": [ { \"name\": \"Kassandra\", \"age\": 16 }, { \"name\": \"Abigail\", \"age\": 22 } ] } ]";
        JSONArray json = new JSONArray(jsonString);
        for(int i=0; i<json.length(); i++){
          JSONObject j = json.getJSONObject(i);
          System.out.println(j + "\n------");
        }
    }
}
cygmwpex

cygmwpex2#

使用 jackson 库 。 这里 是 一 个 片段 。

public static void main(final String[] args) throws JsonProcessingException {
    final List<Child> children = new ObjectMapper().readValue(
        readFromFile("data.json"), new TypeReference<List<Child>>() {
        });
    System.out.println(children);
  }

  public static String readFromFile(final String resourcePath) {
    final ClassPathResource resource = new ClassPathResource(resourcePath);

    try {
      final InputStream inputStream = resource.getInputStream();
      return readFromInputStream(inputStream);
    } catch (final IOException var4) {
      return "";
    }
  }

  private static String readFromInputStream(final InputStream inputStream) throws IOException {
    final StringBuilder resultStringBuilder = new StringBuilder();
    final BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
    Throwable var3 = null;

    try {
      String line;
      try {
        while ((line = br.readLine()) != null) {
          resultStringBuilder.append(line).append("\n");
        }
      } catch (final Throwable var12) {
        var3 = var12;
        throw var12;
      }
    } finally {
      if (br != null) {
        if (var3 != null) {
          try {
            br.close();
          } catch (final Throwable var11) {
            var3.addSuppressed(var11);
          }
        } else {
          br.close();
        }
      }

    }

    return resultStringBuilder.toString();
  }

中 的 每 一 个

uoifb46i

uoifb46i3#

谷歌的gson似乎是最简单最简洁的途径,它已经有了一个序列化器/反序列化器,应该可以为大多数pojos工作。

String json = "[ { \"name\": \"Andrew\", \"age\": 21, \"parents\": [ { \"name\": \"Joseph\", \"age\": 18 }, { \"name\": \"Joseph\", \"age\": 18 } ] }, { \"name\": \"Maria\", \"age\": 35, \"parents\": [ { \"name\": \"Kassandra\", \"age\": 16 }, { \"name\": \"Abigail\", \"age\": 22 } ] } ]";

    //default deserializer should work for strings, wrappers and select generics(including list)
    Gson gson = new Gson();

    JsonArray jsonArray = gson.fromJson(json, JsonArray.class);

    for (JsonElement jsonElement : jsonArray) {
        Person iPerson = gson.fromJson(jsonElement, Person.class);
        System.out.println(iPerson);
    }
    //output       
 /*  Person{name='Andrew', age=21, parents=[Person{name='Joseph', age=18, parents=null}, Person{name='Joseph', age=18, parents=null}]}
Person{name='Maria', age=35, parents=[Person{name='Kassandra', age=16, parents=null}, Person{name='Abigail', age=22, parents=null}]}*/

相关问题