fastjson 解析报错 com.alibaba.fastjson.JSONException: scan null error

本文描述了在使用FastJSON进行对象与JSON互转时遇到的scannullerror问题,通过排查发现是由于Map中存在null键导致。文章分享了解决方案,即过滤掉Map中的null键,避免了错误的发生。

我对一个对象转json,然后再将json转对象时发现报错:
com.alibaba.fastjson.JSONException: scan null error ,找不到什么原因导致扫描到null。
由于json的内容实在是太多,json在线格式化报错(一脸懵逼),也看不出啥问题。
后来我减少对象中的内容,发现json串中的一个key为null。
原来是因为我使用Map保存大量数据,map支持key 为null,对key 为null的数据过滤后,问题解决。

虽然给定引用中未直接提及“com.alibaba.fastjson.JSONException: syntax error, position at 0, name linkkey”错误的解决方案,但可以从类似错误的解决思路中获取一些启示。 ### 单引号转换问题 当 JSON 字符串中包含单引号时,FastJSON 转换可能出错。例如,前台传来的参数中值包含单引号,如 `{'key1':'value'1','key2':'value2','key3':'value'3'}`,FastJSON 转换时就会报错。解决方案是确保 JSON 字符串中的引号使用规范,将单引号替换为双引号,或者对单引号进行转义处理。可以使用如下代码进行替换: ```java String jsonStr = "{'key1':'value'1','key2':'value2','key3':'value'3'}"; jsonStr = jsonStr.replace("'", "\""); ``` ### 期望 { 但实际为字符串问题 若报错信息为 “syntax error, expect {, actual string, pos 0”,这意味着 FastJSON 期望的是一个 JSON 对象(以 `{` 开头),但实际得到的是一个字符串。需要检查传入的字符串是否确实是合法的 JSON 对象格式。可以使用如下代码进行验证: ```java try { JSONObject jsonObject = JSON.parseObject(jsonStr); } catch (JSONException e) { e.printStackTrace(); } ``` ### 依赖问题 可以考虑引入 Jackson 相关依赖来处理 JSON 数据。Jackson 是一个功能强大的 JSON 处理库,可能可以避免 FastJSON 的一些问题。以下是引入 Jackson 相关依赖的示例: ```xml <!--jackson相关包--> <!--https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.10.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.10.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.10.0</version> </dependency> ``` ### 代码逻辑问题 检查代码中获取和处理 JSON 数据的逻辑。例如,确保 `location` 对象不为空,`data.getString(key)` 有值,并且在连续调用 `get` 方法时不会出现值为 `null` 的情况。可以添加日志输出,逐步排查问题: ```java System.out.println("location: " + location); System.out.println("data.getString(key): " + data.getString(key)); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值