以JAVA格式在JSON文件中写入数据

时间:2017-01-18 16:27:48

标签: java json formatting dataset

我对JSON中的数据输入形式有疑问。

我通过在json文件中单击按钮来保存数据,但输出错误。如何解决此问题,以便新数据集位于逗号之后?

JSONObject json = new JSONObject();
File filename = new File("dbsettings.json");

json.put("driver", textFieldDriver.getText());
json.put("url", textFieldURL.getText());
json.put("scheme", textFieldscheme.getText());          
json.put("name", textFieldDBname.getText());

try {
    System.out.println("Writting Data into JSONfile ...");
    System.out.println(json);
    FileWriter jsonFileWriter = new FileWriter(filename.getAbsoluteFile(), true);
    jsonFileWriter.write(json.toJSONString());
    jsonFileWriter.flush();
    jsonFileWriter.close();
    System.out.println("Done!");

} catch (IOException e) {
    e.printStackTrace();
}
JOptionPane.showMessageDialog(
    null, "Save Data successful", "Information", JOptionPane.INFORMATION_MESSAGE
);
setVisible(false);

这是我的输出:

[{
    "driver": "oracle.jdbc.driver.OracleDriver",
    "url": "dburl1",
    "scheme": "myscheme1",
    "name": "mydbname1"
},{
    "driver": "oracle.jdbc.driver.OracleDriver",
    "url": "myurl",
    "scheme": "myscheme",
    "name": "mydbname"
}]{"scheme":"test3","name":"test4","driver":"test1","url":"test2"}

请帮助我!

1 个答案:

答案 0 :(得分:3)

问题在于您的FileWriter对象并且具有true。这意味着它将附加到文件中。如果要将JSON对象正确添加到文件中,我建议首先从文件中读取所有JSON对象。然后将它们存储在列表中,并将程序中的任何新条目附加到列表中。程序完成后,循环收集的JSON对象列表,并用所有新旧JSON对象覆盖您正在读取的文件。

程序启动时,请阅读" dbsettings.json"并将所有这些JSON对象存储在某种数据结构中。如果您需要在程序中稍后根据某个键找到JSON对象,则可以使用arraylist或者也可以使用Hashmap。

然后,当程序运行并且您正在接收用户对新JSON对象的输入时,只需将它们添加到数据集合中即可。每次获得新文件时都不要将它们写入文件。我建议当用户干净地退出程序时,只覆盖集合中所有JSON对象的文件。这样,您可以确保每次启动程序时数据都是正确的JSON格式。唯一的缺点是,如果程序意外退出,您将丢失在程序运行期间输入的所有数据。

另一个不太理想的解决方案是完成上述所有操作,但每次从用户处获取数据时都会执行此操作。

//for JSON you want to output them like "[json0, json1,json2,... etc]"
FileWriter jsonFileWriter = new FileWriter(filename.getAbsoluteFile());
jsonFileWriter.write("[")
for(int i = 0; i < jsonDataStructure.size(); i++)
{
    jsonFileWriter.write(jsonDataStructure.get(i).toJSONString());
    if(i + 1 != jsonDataStructure.size())
      jsonFileWriter.write(",");
}
jsonFileWriter.write("]");
jsonFileWriter.flush();
jsonFileWriter.close();