2016-11-17 5 views
0

JSONObjectのforループに問題があります。要素「名前」を変更しようとしています。 私はオブジェクトのすべてのキーを知っています。 私はStrings: `[" person "、" data "、" moreInfo "、" name "、" John "]というリストを持っています。 私はそれらがオブジェクトであることを知っています。データなどで人物1、MOREINFO内部データ...JSONObjectでキーを反復する

私はそのようにそれを変更することができます。

JSONObject js = new JSONObject(jsonFile); 
js = js.getJSONObject("person 1").getJSONObject("data").getJSONObject("moreInfo"); 
js.put("name","secName"); 

それは大丈夫ですが、私は私がリストになりますどのくらいの要素を知りません。 多分:["person 1" ....... "moreInfo", "name", "John"]; 私はforループを使用しようとしましたが、私はそれを作ることはできません。そのような結果を繰り返すことは可能です:getJSONObject("moreInfo")?私はあなたがサイズnの文字列配列を持っていると仮定し

{ 
    "Person 1": -firstWord in list { 
     "data": { 
      "moreInfo": { 
       "name": "John" 
      } 
     } 
    } 
} 
+0

JSON文字列の内容を表示できますか? –

+0

最初の投稿を編集しますが、ファイルから生成しているためランダムなデータです。私はキーを持っており、インデックス 'list.size() - 2'のキーでオブジェクトに行き、そのオブジェクトに対してputメソッドを実行する必要があります。 –

+0

サイドの質問:JSONを '{" people ":" John "、" moredata ":{" value ":" extras "}}]の形式にすることは可能ですか? –

答えて

0

だから、最初のn-1の要素は、JSONのパスで、最後の一つはあなたが好きそれを行うことができますが、

を設定する新しい値ですこれは

String[] paths = new String[] {"person 1","a","b","c","moreInfo", "name", "John"}; 

    JSONObject root = js; 
    JSONObject current = root; 
    for (int i = 0; i < paths.length - 2; i++) { 
     current = current.getJSONObject(paths[i]); 
    } 
    current.put(paths[paths.length - 2], paths[paths.length - 1]); 

ここでは正確性のチェックを省略します。しかし、各ステップにキーが存在するかどうかをチェックするコードを追加することができます。

+0

'current = current.getJSONObject(paths [i]);'は存在してはいけません。 –

+0

あなたは正しく、タイプミスが修正されました。ループ内では '' root ''ではなく '' current ''でなければなりません – Harper

関連する問題