問題 : 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()); }至於這個問題產生的原因,網上都是說是由於字符串中含有“\”導致,我個人覺得不像這個原因,但是確實是存在這個“\”會導致這個問題。這個問題探究的原因先保留吧。