Android保存JSONArray

时间:2016-01-04 21:40:25

标签: android json

我在保存我的JSONArray时遇到了问题,这是我游戏所需要的。 我有2个方法:

public void saveArr(Context c,JSONArray arr,String name){
    String fileName = name+"Arr.json";
    String data = "";
    if (arr != null) {

        /*
        Convert JSONArray to String
         */
        data = arr.toString();
       /*
       TODO PROBLEM data not compatible with JSONArray
        */
    }
    FileOutputStream fos;

    try {


        fos = c.openFileOutput(fileName, Context.MODE_PRIVATE);
        fos.write(data.getBytes());
        fos.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

 public JSONArray getArrJSON(Context c,String name){
    StringBuilder sb =null;
    JSONObject obj=null ;
    JSONArray arr = null;
    try {
        FileInputStream fis = c.openFileInput(name+"Arr.json");
        InputStreamReader isr = new InputStreamReader(fis);
        BufferedReader bufferedReader = new BufferedReader(isr);
        sb = new StringBuilder();
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            sb.append(line);
        }

        //Here i get an Exception JSONException
        obj= new JSONObject(sb.toString());
        arr = deck.getJSONArray("arr");
    } catch (Exception e) {
        e.printStackTrace();
    }
    return arr;
}

JSONArray看起来像这样:

[
 {
  "pictures":[
       {
         "key":"value"
       }
  ],
  "name":"name",
  "id":"id"
 },
 {
  "pictures":[
        {
          "key":"value"
        }
  ],
  "name":"name",
  "id":"id"
 }
]

我得到一个异常,我无法发布,因为我的json文件很长... 但是这行是JSONException:

`obj= new JSONObject(sb.toString());`
方法getArrJSON

中的

我不知道我的错误在哪里开始。但我认为错误是:

 arr = deck.getJSONArray("arr");

但就像我在前一行中抛出异常之前所说的那样。

1 个答案:

答案 0 :(得分:1)

而不是

obj= new JSONObject(sb.toString());

arr = new JSONArray(sb.toString());

在第一个方法中写入磁盘的字符串表示JSONArray而不是JSONObject。

了解JSONObject和JSONArray之间的区别非常重要。 JSONArray(通常)包含JSONObjects,JSONArray的字符串表示始终以'['。

开头。