2016-10-06 11 views
1

3つの入力があります。Java:ネストされたjsonオブジェクトにキー値のペアを追加します。

  • A JSONオブジェクト(ネスト)

  • ノード構造

  • キー値ペア

マイタスクを見ることによってノードにキー値ペアを追加することですオリジナルのJSONを更新します。例えば

、入力がある場合、

  1. JSONオブジェクト

    { 
        a: 
        { 
         b: 
          { 
          c:{} 
          }  
        } 
    } 
    
  2. ノード構造

    a.b. 
    
  3. キー最終更新JSONは

    { 
         a: 
         { 
          b: 
           { 
           key:val 
           c:{} 
           }  
         } 
        } 
    

    のようになります。と値v

は、元のJSONも{}することができますのでご注意ください。次に、ノード構造を見てJSON全体を構築する必要があります。ここで

私のコードは

  • あるJSON

    public void modifiedJSON(JSONObject orgJson, String nodeStruct, JSONObject ev) throws JSONException{ 
    JSONObject newJson = new JSONObject(); 
    JSONObject copyJson = newJson; 
    
    char last = nodeStruct.charAt(nodeStruct.length()-1); 
    String lastNode = String.valueOf(last); 
    
    int i = 0; 
    while(orgJson.length() != 0 || i< nodeStruct.length()){ 
    
        if(orgJson.length() ==0){ 
         if(nodeStruct.charAt(i) == last){ 
          newJson.put(String.valueOf(last), ev.toString()); 
         }else{ 
          newJson.put(String.valueOf(nodeStruct.charAt(i)), ""); 
         } 
         newJson = newJson.getJSONObject(String.valueOf(nodeStruct.charAt(i))); 
    
        } 
        else if(i >= nodeStruct.length()){ 
         if(orgJson.has(lastNode)){ 
          newJson.put(String.valueOf(last), ev.toString()); 
         }else{ 
    
         } 
        } 
    } 
    } 
    

    への追記

    public JSONObject makeEV(String ele, String val) throws JSONException{  
        JSONObject json =new JSONObject(); 
        json.put(ele, val); 
        return json; 
    } 
    
  • キーと値のペアを作り、私はここで立ち往生しています。助けてください。前もって感謝します。

+0

あなたのノード構造ではなく 'a.b.key'あるべきではないでしょうか? –

+0

ええ。それも大丈夫です –

答えて

1

それはString#split(regex)は、次のように使用して行うことができる:それ、

public void modifiedJSON(JSONObject orgJson, String nodeStruct, 
         String targetKey, String value) { 
    // Split the keys using . as separator 
    String[] keys = nodeStruct.split("\\."); 
    // Used to navigate in the tree 
    // Initialized to the root object 
    JSONObject target = orgJson; 
    // Iterate over the list of keys from the first to the key before the last one 
    for (int i = 0; i < keys.length - 1; i++) { 
     String key = keys[i]; 
     if (!target.has(key)) { 
      // The key doesn't exist yet so we create and add it automatically 
      target.put(key, new JSONObject()); 
     } 
     // Get the JSONObject corresponding to the current key and use it 
     // as new target object 
     target = target.getJSONObject(key); 
    } 
    // Set the last key 
    target.put(targetKey, value); 
} 
+0

実際、ここにevは私が挿入する必要があるキーの値のペアです。 –

+0

必要な変更はできますか? –

+0

ありがとうございます。キーが別の引数として与えられ、ノード構造が 'a.b.'の場合はどうなりますか? –

関連する問題