2016-08-18 68 views
0

我有以下的JSON字符串的TXT文件:解析TXT使用JSON字符串作为列表文件<MyDataEntry>

{"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"); 
     } 
    } 

} 
+0

你有没有在文件控制对于垫?如果您将文件转换为有效的json,例如“[数据”:“abc”},“数据”:“rbc”},{\t“id” :3,“data”:“gbc”}]'你可以使用许多不同的json库中的一个来解析输入(jackson,gson,)。你可以使用http://jsonlint.com/来检查你的json的格式。 – lippertsjan

+0

您是指在速度/内存或代码行数方面有效率? –

+0

如果您使用的是SimpleJSON(或GSON,或者其他任何JSON库,那么您应该可以将整个文件读入JSON对象,然后遍历数组,qv [here](https:// www。 –

回答

1

不要重新发明轮子。您可以使用Jackson JSON库来为你做的;)

例子:

首先,你需要调整你的JSON(如果你没有write对文件的访问,一行行读它,构建你自己的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/

+0

'lexicalTokensConfig'应该是'List ' ? – HackerDuck

+0

@HackerDuck对不起,我从我的回购中复制: https://github.com/amirbawab/EasyCC/blob/master/lexical-analysis/src/main/java/core/config/LexicalConfig.java 检查更新 – CMPS

+0

如何获得对每个单独的MyDataEntry的访问?据我所知,从您的示例中,您正在阅读单个JSON字符串'{...}'。 – HackerDuck