java - 反序列化 json 和分隔换行符 NDJ

标签 java json gson

我有一个简单的 JSON 文件,我想使用 gson 和 Java 解析 (units.json):

{"user_name": "happyman", "status": {"hp": 20, "karma": 7, "mp": 10}, "gold": 5.25,}
{"user_name": "sadman", "status": {"hp": 10, "karma": 2, "mp": 6}, "gold": 0.5,}
...

我遇到的问题是,我该如何解析这个文件,因为它不是数组格式?

目前我有一个 Filereader 到 JsonReader 调用的路径

FileReader fileReader = new FileReader(jsonFilePath);
JsonReader jsonReader = new JsonReader(fileReader);
jsonReader.beginObject();
while (jsonReader.hasNext()) {
    String name = jsonReader.nextName();
    if (name.equals("user_name")) {
        System.out.println("user_id: "+jsonReader.nextString());
    }
    //...checks for other equals

但是,使用这段代码,我只能得到第一行。 我感觉这与“hasNext()”不是 while 循环中的正确方法调用有关。

感谢您的帮助!谢谢。

最佳答案

您可以将此代码与 GSON 库一起使用:

ObjectMapper mapr = new ObjectMapper();
Map<String,Object> map = mapr.readValue(jsonString, Map.class);

public class Units {
  @JsonProperty("user_name")
  public String user_name;

  @JsonProperty("status")
  public List<Attr> attrs;

  ..
}
public class Attr {
  @JsonProperty("hp") 
  public String hp;
  @JsonProperty("karma") 
  public String karma;
  @JsonProperty("mp") 
  public String mp;
}

ObjectMapper mapr = new ObjectMapper();
Units unit = mapr.readValue(jsonString, Units.class);

对于两者,您都可以使用 jsonString 来定义文件中的每个 json 单元。

关于java - 反序列化 json 和分隔换行符 NDJ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16068283/

相关文章:

java - 我想使用 jolt 转换 json 结构,但出现错误

java - Android - 单击按钮以使用 ListView 显示 Activity 时应用程序崩溃

javascript - React js将分组列数组转换为普通数组

java - 如何转换 Map<String, Map<MetricName, ?将 Metric>> 扩展为 JsonObject

java - 使用Gson序列化公开字段时如何更改字段名称?

java - 线程 "main"java.lang.NoClassDefFoundError : org/apache/commons/csv/CSVFormat 中出现异常

javascript - 如何为 Google 自定义搜索 API json 结果设置 HTML 元素样式?

json - 使用自定义 MarshalJSON() 方法嵌入结构的惯用方法

java - 使用 GSON 序列化/反序列化简单对象 - 无时区指示器错误

java - 涉及类型参数时,List<List<?>> 不能赋值给 List<List<?>>