问题 : 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()); }至于这个问题产生的原因,网上都是说是由于字符串中含有“\”导致,我个人觉得不像这个原因,但是确实是存在这个“\”会导致这个问题。这个问题探究的原因先保留吧。