2017-01-18 83 views
0

我对JSON中的数据输入形式有疑问。以正确的格式在JSON文件中写入数据JAVA

我用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"} 

请帮助我!

+0

这不是你的实际代码吗?其他2分贝条目来自哪里? – brso05

+0

另外两个都存在于JSON文件中,它们是默认的db。 –

回答

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(); 
+0

我读出了json文件并将它们写入一个数组列表。之后o添加新模型。 System.out.println(模型)显示模型的名称。如何用arraylist及其属性编写新的json文件? –

+0

我添加了一个基本的循环输出使用数组列表作为我的数据结构的json对象@deli_gicik –

+0

我明白了!非常感谢! –