org.json.JSONObject 解析失敗問題的解決

問題 : Missing value at 121 [character 122 line 1]

背景: 我的項目是需要讀取一個已經寫好的文本文件,文件中是普通的JSON格式的字符串,直接讀取字符串new JSONObject對象就可以了,但是突然有一天就不行了,爆出了Missing value at 121 [character 122 line 1]的問題。查找了各方面都沒能找到有效的解決方案,我只能回過頭好好的看JSON源碼,發現JSONTokener對象可以讀取文件流,從而解決了這個問題。

原代碼:

FileReader fileReader = new FileReader(args[0]); //args[0] 是我讀取的文件名
BufferedReader br = new BufferedReader(fileReader);
StringBuffer sb = new StringBuffer();
String temp = br.readLine();
while (temp != null) {
    sb.append(temp + " ");
    temp = br.readLine();
}
br.close();
JSONObject obj = new JSONObject(sb.toString()); //讀取了文件後,生成JSON對象,功能就完成了。
爆出了Missing value at 121 [character 122 line 1]問題後,我就使用JSONTokener,從而解決了這個問題。

修改後代碼 : 

JSONObject obj = null;
InputStreamReader inputStreamReader = null;
try {
    inputStreamReader = new InputStreamReader(new FileInputStream(args[0]), "UTF-8"); //讀取流文件
    JSONTokener tokener = new JSONTokener(inputStreamReader); //JSONTokener 支持流文件解析
    obj = new JSONObject(tokener); //通過JSONTokener建立JSON對象,完成我的功能。
    inputStreamReader.close();
}catch (Exception e){
    LogUtil.log(TAG,"tokener1 : "+e.getMessage());
}
至於這個問題產生的原因,網上都是說是由於字符串中含有“\”導致,我個人覺得不像這個原因,但是確實是存在這個“\”會導致這個問題。這個問題探究的原因先保留吧。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章