反序列化json并分隔换行符NDJ

时间:2013-04-17 19:14:33

标签: 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循环中不是正确的方法调用有关。

我很感激帮助!感谢。

1 个答案:

答案 0 :(得分:1)

您可以将此代码用于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单元。