2016-06-26 25 views
2

ワークフローにいくつかのJSONObjectがあり、同じJSONObjectがjsonファイルに書き込まれて保存されています。JSONファイル - Java:フィールド値の編集/更新

jsonファイルを効率的に更新するにはフィールドが必要な場所はで、より新しいJSONObjectsインスタンスの内容が必要です。

例:ファイルに

私はメモリでは

ObjectOnFile = {key1:val1, key2:val2,...} 

を持っている私は、更新は次のようになります

ObjectInMemory = {key1:val1_newer, key2:val2_newer,...} 

を持っている:私は希望一般に

if (!(ObjectInMemory.get(key1).equals(ObjectOnFile.get(key1))) 
     // update file field value <--- how to? 

ヴァルを更新するその内容が新しい(異なる)すべてのキーのue。

実は私のコードは次のとおりです。

import org.json.JSONObject; 
import com.fasterxml.jackson.databind.ObjectMapper; 

ObjectMapper mapper = new ObjectMapper(); 
Sting key = "key1"; //whatever 
JSONObject jo = new JSONObject("{key1:\"val1\", key2:\"val2\"}"); 
JSONObject root = mapper.readValue(new File(json_file), JSONObject.class); 
JSONObject val_newer = jo.getJSONObject(key); 
JSONObject val_older = root.getJSObject(key); 
if(!val_newer.equals(val_older)){ 
    root.put(key,val_newer); 
/*write back root to the json file...how? */ 
} 

答えて

1

単にあなたはこのように行うことができます。

import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 

import org.json.JSONException; 
import org.json.JSONObject; 

import com.fasterxml.jackson.databind.ObjectMapper; 


public class Test { 

    public static void main(String[] args) throws JSONException, IOException 
    { 
     ObjectMapper mapper = new ObjectMapper(); 
     String key = "key1"; //whatever 

     JSONObject jo = new JSONObject("{key1:\"val1\", key2:\"val2\"}"); 
     //Read from file 
     JSONObject root = mapper.readValue(new File("json_file"), JSONObject.class); 

     String val_newer = jo.getString(key); 
     String val_older = root.getString(key); 

     //Compare values 
     if(!val_newer.equals(val_older)) 
     { 
      //Update value in object 
      root.put(key,val_newer); 

      //Write into the file 
      try (FileWriter file = new FileWriter("json_file")) 
      { 
       file.write(root.toString()); 
       System.out.println("Successfully updated json object to file...!!"); 
      } 
     } 
    } 
} 
+0

こんにちはPVR、答えてくれてありがとう。 このようにして、write関数はファイル全体を書き換えるか、更新された部分だけを書き換えますか? – GrayFox

+0

ファイル内にjson全体を書き直してください – PVR

+0

ありがとうございます。解決済みの:) – GrayFox

関連する問題