java - 将 JSON 字符串解析为 List<Data Entry> 的文本文件

标签 java json

我有一个包含以下 JSON 字符串的 txt 文件:

{"id":1,"data":"abc"}
{"id":2,"data":"rbc"}
{"id":3,"data":"gbc"}

我按如下方式阅读此文件:

    File f = new File("src/test/resources/jsons.txt");
    if (f.exists()){
        InputStream is = new FileInputStream("src/test/resources/jsons.txt");
        data = IOUtils.toString(is);
    }

现在我想将此文件的内容解析为 List<MyDataEntry> 。这是类 MyDataEntry 的片段代码.

如何正确提取每个单独的 JSON 字符串并将其发送到 MyDataEntry 的构造函数?有没有更有效的方法来做到这一点?

class MyDataEntry {
    private String id;
    private String data;

    public MyDataEntry(String rawDataEntry)
    {
        parse(rawDataEntry);
    }

    private parse(String rawDataEntry)
    {
        JSONObject rd =  new JSONObject(rawDataEntry);
        if(rd.has("id")){
           id = data.getString("id");
        }
        if(rd.has("data")){
           data = data.getString("data");
        }
    }

}

最佳答案

不要重新发明轮子。您可以使用 Jackson JSON库可以为您做到这一点;)

示例:

首先,您需要重构 JSON(如果您没有该文件的写入权限,请逐行读取它并构建您自己的 JSON 结构):

{
    "allData":[
         {"id":"123", "data":"some data"},
         ...
    ]
}

MyDataWrapper.java

@JsonIgnoreProperties(ignoreUnknown = true)
public class MyDataWrapper {
     @JsonProperty("allData")
     public List<MyData> allData;
}

MyData.java

@JsonIgnoreProperties(ignoreUnknown = true)
public class MyData {

    @JsonProperty("id")
    public int id;

    @JsonProperty("data")
    public String data;
}

解析文件:

try {
     ObjectMapper mapper = new ObjectMapper();
     InputStream file = getClass().getResourceAsStream("MY_FILE.txt");
     MyDataWrapper myDataWrapper = mapper.readValue(file, MyDataWrapper.class);
} catch (IOException e) {
     e.printStackTrace();
}

编辑

从字符串解析:

Staff obj = mapper.readValue(jsonInString, MyDataWrapper.class);

引用:https://www.mkyong.com/java/jackson-2-convert-java-object-to-from-json/

关于java - 将 JSON 字符串解析为 List<Data Entry> 的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39018175/

相关文章:

java - Java中Math.abs的时间复杂度?

java - 如何通过hashmap向Google map API添加多个标记? - (安卓)

java - 错误 :(124, 9) 错误:方法没有覆盖或实现父类(super class)型的方法

c# - 在 WCF REST 服务 POST 方法中处理 Json 请求数据

java - 使用 Guice 从其他库注入(inject)父类

java - 在 Java/MyBATIS 中插入重复行时检测

java - 如何在覆盖文件之前检查文件是否为空?

java - ContextCompat.getColor 方法忽略夜间模式

javascript - 如何使用 HTML5 Fetch API 修复 React Js 中的 OpenWeather API 不透明响应

iphone - 在 Objective C 中将数据发布到 Wufoo 表单