2017-01-18 20 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

他の2つはJSONファイルに存在し、デフォルトのdbです。 –

答えて

3

問題は、あなたのFileWriterオブジェクトにあり、それが本当であることです。つまり、ファイルに追加されます。 JSONオブジェクトをファイルに正しく追加したい場合は、すべてのJSONオブジェクトを最初に読み込むことをお勧めします。次に、それらをリストに格納し、プログラムの新しいエントリをリストに追加します。あなたのプログラムが終了したら、収集されたJSONオブジェクトのリストをループし、読んでいるファイルを新旧すべてのJSONオブジェクトで上書きします。

プログラムが起動すると、「dbsettings.json」から読み込み、すべてのJSONオブジェクトを何らかの種類のデータ構造体に格納します。 JSONオブジェクトを後でプログラムでキーに基づいて検索する必要がある場合は、arraylistが動作します。

その後、プログラムが実行され、新しい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に書き出します。その後、新しいモデルを追加します。 System.out.println(models)は私にモデルの名前を表示します。 arraylistとその属性を持つ新しいjsonファイルを作成するにはどうすればよいですか? –

+0

私はデータリスト構造を使用してjsonオブジェクトを出力するための基本ループを追加しました@deli_gicik –

+0

私はそれを手に入れました!どうもありがとう! –

関連する問題