我在保存我的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");
但就像我在前一行中抛出异常之前所说的那样。
答案 0 :(得分:1)
而不是
obj= new JSONObject(sb.toString());
试
arr = new JSONArray(sb.toString());
在第一个方法中写入磁盘的字符串表示JSONArray而不是JSONObject。
了解JSONObject和JSONArray之间的区别非常重要。 JSONArray(通常)包含JSONObjects,JSONArray的字符串表示始终以'['。
开头。