2017-01-18 8 views
0

JSON에서 입력 된 데이터의 형식에 대한 질문이 있습니다.올바른 형식의 JSON 파일에 데이터 쓰기 JAVA

json 파일에서 버튼 클릭으로 데이터를 저장하지만 출력이 잘못되었습니다. 새 데이터 세트가 쉼표 뒤에 오도록이 문제를 어떻게 해결할 수 있습니까?

[{ 
    "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는 저를 도와 :

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); 

내 출력입니다!

+0

이것은 실제 코드가 아닙니다. 다른 2 db 항목의 출처는 어디입니까? – brso05

+0

다른 두 개는 JSON 파일에 존재하며 기본 db입니다. –

답변

3

문제는 FileWriter 개체에 있으며 사실입니다. 즉, 파일에 추가됩니다. JSON 객체를 파일에 올바르게 추가하려면 모든 JSON 객체를 먼저 읽는 것이 좋습니다. 그런 다음 목록에 저장하고 프로그램의 새 항목을 목록에 추가하십시오. 프로그램이 완료되면 수집 된 JSON 객체의 목록을 반복하고 읽는 파일을 모든 새롭고 오래된 JSON 객체로 덮어 씁니다.

프로그램이 시작되면 "dbsettings.json"에서 읽고 모든 JSON 개체를 일종의 데이터 구조에 저장하십시오. arraylist는 나중에 키 또는 일부 키를 기반으로 프로그램에서 JSON 객체를 찾아야하는 경우 Hashmap 또는 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 파일을 읽고 arraylist에 씁니다. 그 후에 새로운 모델을 추가하십시오. System.out.println (models)은 모델의 이름을 보여줍니다. arraylist와 그 속성을 가진 새로운 json 파일을 작성하는 방법은 무엇입니까? –

+0

배열 목록을 데이터 구조로 사용하여 json 객체를 출력하기위한 기본 루핑을 추가했습니다. @deli_gicik –

+0

알 겠어요! 고마워요! –