2016-10-09 2 views
0

내 응용 프로그램을 업데이트하는 업데이터 유틸리티를 구축 중입니다. 이전 버전의 구성 파일을 저장해야합니다. 일부 구성 파일은 JSON 파일입니다. 이전 값을 유지하는 방식으로 JSON 파일을 업데이트하는 방법이 있습니까? 하지만 새로운 개체 또는 키가 저장되는 경우에도이 값이 유지됩니까? 버전 1 JSON 파일 :Java - JSON 파일 병합

{ 
    "name": "demo", 
    "description": "Parse some JSON data", 
    "location": "New York" 
} 

버전 2 JSON 파일 : 병합 후

{ 
    "name": "demo", 
    "description": "Parse some JSON data", 
    "location": "London", 
    "day": "Monday" 
} 

예상 JSON 파일 : 예를 들어

{ 
    "name": "demo", 
    "description": "Parse some JSON data", 
    "location": "New York", 
    "day": "Monday" 
} 

는 방법이 있나요 외부 라이브러리없이이 작업을 수행 할 수 있습니까? @ cricket_007으로

+0

당신은 어떤 JSON 라이브러리를 사용하거나 손으로 JSON을 쓰고있어? – nandsito

+0

현재 JSON 라이브러리를 사용하고 있지 않습니다. JSON이 파일로 제공되었으므로 원래 작성 방법을 모르겠습니다. – Zoltanik

+1

라이브러리를 사용하십시오. 둘 다 해시 맵에 넣으십시오. JSON 객체를 다시 빌드하십시오. –

답변

2

이 좋습니다,이 솔루션은 나를 위해 일한 :

public void mergeJsonsFiles(File newJson, File oldJson) throws Exception { 
    HashMap<String, Object> newMap = convertJsonToMap(newJson); 
    HashMap<String, Object> oldMap = convertJsonToMap(oldJson); 

    for (Entry<String, Object> entry : oldMap.entrySet()) { 
     if (newMap.get(entry.getKey()) == null) { 
      newMap.put(entry.getKey(), entry.getValue()); 
     } 
    } 

    ObjectMapper mapper = new ObjectMapper(); 
    String jsonFromMap = mapper.writeValueAsString(newMap); 

    PrintWriter writer = new PrintWriter(newJson); 
    writer.write(jsonFromMap); 
    writer.close(); 
} 

private HashMap<String, Object> convertJsonToMap(File json) { 
    ObjectMapper mapper = new ObjectMapper(); 
    HashMap<String, Object> map = new HashMap<String, Object>(); 
    try { 
     map = mapper.readValue(json, new TypeReference<HashMap<String, Object>>(){}); 
    } catch (IOException e) { 
     map.clear(); 
    } 
    return map; 
}