JSONObject text must begin with '{' at character 1 of错误解决

问题描述

如下代码,读取本地文件,将文本内容使用org.json解析为jsonobject对象,结果一直(catch到)爆出如题错误。
这里写图片描述

StringBuilder sb=new StringBuilder();
        BufferedReader br=new BufferedReader(new FileReader("d:/total.json"));
        String s = null;
        while((s = br.readLine())!=null){//使用readLine方法,一次读一行
            sb.append(s);
        }
        JSONObject jsonObject2=null;
        String string=sb.toString().replaceAll(" ", "").trim();
        System.out.println(string);
        try {
            jsonObject2=new JSONObject(string);

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

解决方案

经查证,文本内容确实没有问题,print的字符串符合json语法(可以到http://www.bejson.com/ 在线检测),最后发现是文件保存的格式如BOM问题。
这里写图片描述
本人多试了几次就好了!

### 关于JSON解析错误的原因分析 当遇到 `cn.hutool.json.JSONException: A JSONObject text must begin with '{'` 错误时,这通常表明传入的JSON字符串不符合标准的JSON语法。具体来说,该错误提示表示JSON字符串的第一个字符不是 `{` 或 `[`,这是合法JSON对象或数组的起始标志。 以下是可能导致此问题的一些常见原因以及解决方案: #### 1. **输入数据不合规** 如果传递给 `JSONUtil.parseObj()` 方法的字符串并非有效的JSON格式,则会抛出上述异常。例如,缺少括号、多余的逗号或其他非法字符都会导致解析失败[^2]。 ```javascript // 非法JSON示例 var invalidJsonString = "{name:'张无忌'}"; // 缺少双引号包裹键名和值 try { JSON.parse(invalidJsonString); } catch (e) { console.error(e.message); // 输出错误信息 } ``` 为了防止此类问题发生,在调用任何JSON解析函数之前,请先验证输入字符串是否严格遵循JSON语法规则。 --- #### 2. **意外的数据污染** 有时,由于网络传输过程中的编码问题或者程序逻辑上的失误,原始JSON字符串可能会被修改甚至截断,从而破坏其结构完整性。这种情况下也需要仔细排查数据来源并修复潜在漏洞。 --- #### 3. **JavaScript环境差异** 某些老旧浏览器可能不具备原生支持的 `JSON` 对象及其方法(如 `parse` 和 `stringify`)。尽管现代环境中这种情况很少见,但如果确实存在兼容性障碍,则可以考虑引入第三方库作为替代方案,比如 Douglas Crockford 开发的经典实现[^4]。 ```javascript if (!window.JSON) { window.JSON = {}; } if (!JSON.parse) { JSON.parse = function(sJSON) {/* 实现省略 */}; } ``` 另外值得注意的是,在Java Scripting API 中运行 JavaScript 脚本时,如果没有显式加载全局命名空间下的 `JSON` 定义也可能引发类似的未定义错误。 --- #### 解决办法总结 - 确认待处理的内容确实是符合RFC 7159规定的JSON文本; - 利用正则表达式初步筛查可疑字段; - 尽量采用成熟的工具类库完成序列化/反序列化的操作以减少人为干预带来的风险; ```javascript function isValidJSON(str){ try{ JSON.parse(str); }catch(e){ return false; } return true; } let testStr = '{"key": "value"}'; console.log(isValidJSON(testStr)); // true ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值