2016-10-09 8 views
0

私は自分のアプリケーションをアップデートするアップデータutilをビルドしています。 設定ファイルを以前のバージョンから保存する必要があります。 設定ファイルのいくつかはJSONファイルです。 JSONファイルを更新する方法はありますか?古い値を保持しています 新しいオブジェクトやキーが保存されていればそれもありますか?例えばJava - マージJSONファイル

: バージョン1つの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" 
} 

方法はあります外部の図書館なしでそうするには?

+0

あなたは、任意のJSONライブラリを使用しているか、手でJSONを書いていますか? – nandsito

+0

現在、私はJSONライブラリを使用していません.JSONは私にファイルとして与えられていますが、元々の記述方法はわかりません。 – Zoltanik

+1

ライブラリを使用します。両方をハッシュマップに入れます。 JSONオブジェクトの再構築 –

答えて

2

はお勧めcricket_007 @として、このソリューションは、私の仕事:

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; 
} 
関連する問題