2017-01-18 15 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"} 

Pls помочь мне!

+0

Это не ваш фактический код? Откуда берутся другие 2 db-записи? – brso05

+0

другие два находятся в JSON-файле, они по умолчанию db. –

ответ

3

Проблема связана с вашим объектом FileWriter и имеет значение true. Это означает, что он будет прикреплен к файлу. Если вы хотите правильно добавить объекты JSON в файл, я бы предложил сначала прочитать все объекты JSON из файла. Затем сохраните их в списке и добавьте в список любые новые записи из вашей программы. Когда ваша программа завершена, соберите список собранных объектов JSON и перезапишите файл, который вы читаете, со всеми новыми и старыми объектами JSON.

Когда программа запускается, прочитайте с «dbsettings.json» и сохраните все эти объекты JSON в какой-то структуре данных. Администратор будет работать или, возможно, Hashmap, если вам нужно будет найти объекты JSON позже в вашей программе на основе некоторого ключа.

Затем, когда программа запускается и вы получаете ввод от пользователя на новые объекты 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 и записал их в arraylist. после этого o добавьте новую модель. System.out.println (модели) показывает мне имена моделей. как написать новый json-файл с arraylist и их атрибутами? –

+0

Я добавил базовый цикл для вывода объектов json с использованием списка массивов в качестве моей структуры данных @deli_gicik –

+0

Я получаю его! Большое спасибо! –