0

私はこのタイプのJSONを持っています:

{
    "stampi": 
    [
        {
            "nome": "Ovale Piccolo 18.2x13.5cm",
            "lunghezza": 18.2,
            "larghezza": 13.5,
            "altezza": 4,
            "volume": 786.83
        },                      
         {
            "nome": "Ovale Grande 22.5x17.4cm",
            "lunghezza": 22.5,
            "larghezza": 17.4,
            "altezza": 4,
            "volume": 1246.54
        }                                                 
    ]


}

そして通常、私はこのコードで読みます:

        StringBuffer sb = new StringBuffer();
        BufferedReader br = null;
        try {
            br = new BufferedReader(new InputStreamReader(getAssets().open("stampi.json")));

            String temp;
            while ((temp = br.readLine()) != null)
                sb.append(temp);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                br.close(); // stop reading
            } catch (IOException e) {
                e.printStackTrace();
            }
        }           
        myjson_stampi = sb.toString();  

プログラム内で配列を使用した後。JSONファイル内に新しい値を追加するメニューを作成しましたが、問題があります...これはコードです:

              StringBuffer sb = new StringBuffer();
              BufferedReader br = null;
              try {
                  br = new BufferedReader(new InputStreamReader(getAssets().open("stampi.json")));

                  String temp;
                  while ((temp = br.readLine()) != null)
                      sb.append(temp);
              } catch (IOException e) {
                  e.printStackTrace();
              } finally {
                  try {
                      br.close(); // stop reading
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }           
              myjson_stampi = sb.toString();      

              try {                       
                  // Creating JSONObject from String
                  JSONObject jsonObjMain = new JSONObject(myjson_stampi);

                  // Creating JSONArray from JSONObject
                  JSONArray objNames = jsonObjMain.names();
                  System.out.println(objNames.toString());

                  jsonArray_stampi = jsonObjMain.getJSONArray("stampi");

                  int num_elem = jsonArray_stampi.length();

                   jsonObjMain.put( "nome","prova");
                   jsonObjMain.put( "lunghezza",22);
                   jsonObjMain.put( "larghezza", 10);
                   jsonObjMain.put( "altezza", 4);
                   jsonObjMain.put( "volume", 10.5);
                   jsonArray_stampi.put( jsonObjMain );
                   try {

                          FileWriter file = new FileWriter("c:\\test.json");
                          //file.write(jsonArray_stampi.);
                          file.write( JSON.stringify(jsonArray_stampi) );
                          file.flush();
                          file.close();

                      } catch (IOException e) {
                          e.printStackTrace();
                      }

              } catch (JSONException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
              }   

          }           });

なぜ正しく動作しないのですか?num_elem 変数は常に 2 です..助けてください!

thxアンドレア

4

2 に答える 2

0

というファイルに書き込もうとしているようですc:\\test.json。でファイルに書き込む適切な Android の方法を使用してみてくださいopenFileOutput。例はここにあります。

String filename = "myfile";
String string = "Hello world!";
FileOutputStream outputStream;

try {
  outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
  outputStream.write(string.getBytes());
  outputStream.close();
} catch (Exception e) {
  e.printStackTrace();
}
于 2013-09-06T15:43:47.637 に答える
0

新しい JSONObject を作成し、それに新しいデータを追加してから、既存のオブジェクトに追加する必要があります。

JSONObject jsonObjMain = new JSONObject(myjson_stampi); //Your existing object
JSONObject jO = new JSONObject(); //new Json Object
JSONArray jsonArray_stampi = jsonObjMain.getJSONArray("stampi"); //Array where you wish to append

//Add data
jO.put( "nome","prova");
jO.put( "lunghezza",22);
jO.put( "larghezza", 10);
jO.put( "altezza", 4);
jO.put( "volume", 10.5);

//Append
jsonArray_stampi.put(jO);

また、完全な jsonObject をファイルに書き戻す必要があります。

file.write(JSON.stringify(jsonObjMain));
于 2013-09-06T13:31:40.940 に答える