com.alibaba.fastjson.JSONException: illegal identifier : pos 3, json

本文档描述了一个在改造基于消息队列请求接口时遇到的问题,使用Paho模拟发送数据导致项目解析报错。错误源于JSON字符串前的空格被转换为特殊字符,引发FastJson解析异常。通过在线JSON格式校验确认格式正确后,发现是由于每行数据前的空格导致。解决方案是去除JSON字符串前的空格,确保无额外格式问题,从而成功解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目场景:

在改造基于消息队列请求的接口时, 利用paho模拟发送数据, 项目上解析报错


问题描述:

发送的数据格式如下

在这里插入图片描述

项目报错截图如下

在这里插入图片描述
错误详情

com.alibaba.fastjson.JSONException: illegal identifier :  pos 3, json : {
    "machineKey":"111",
    "data":[
        {
            "businessCode":"002",
            "businessName":"办电",
            "businessType":"缴费",
            "businessHallName":"城南"
        },
        {
            "businessCode":"003",
            "businessName":"开户",
            "businessType":"业务",
            "businessHallName":"城南"
        }
    ]
}
	at com.alibaba.fastjson.parser.JSONLexerBase.scanSymbolUnQuoted(JSONLexerBase.java:829)
	at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:278)
	at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1335)
	at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1301)
	at com.alibaba.fastjson.JSON.parse(JSON.java:152)
	at com.alibaba.fastjson.JSON.parse(JSON.java:162)
	at com.alibaba.fastjson.JSON.parse(JSON.java:131)
	at com.alibaba.fastjson.JSON.parseObject(JSON.java:223)
	at com.sxd.onlinereservation.mqtt.PushCallback.messageArrived(PushCallback.java:83)
	at org.eclipse.paho.client.mqttv3.internal.CommsCallback.deliverMessage(CommsCallback.java:499)
	at org.eclipse.paho.client.mqttv3.internal.CommsCallback.handleMessage(CommsCallback.java:402)
	at org.eclipse.paho.client.mqttv3.internal.CommsCallback.run(CommsCallback.java:206)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266)
	at java.util.concurrent.FutureTask.run(FutureTask.java)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)


原因分析:

  1. 首先进行JSON格式校验(我这里是对的) , 地址 https://www.sojson.com/simple_json.html

  2. 因为使用的是格式美化好的json(如下代码), 因此每行前面都有空格, 在fastJson接收这些数据时, 会将空格转成\r\n等类似的格式导致解析异常, 需要将前面空格去掉!!!

    {
        "machineKey":"111",
        "data":[
            {
                "businessCode":"002",
                "businessName":"办电",
                "businessType":"缴费",
                "businessHallName":"城南"
            },
            {
                "businessCode":"003",
                "businessName":"开户",
                "businessType":"业务",
                "businessHallName":"城南"
            }
        ]
    }
    

解决方案:

改成如下格式:

{
"machineKey":"111",
"data":[
{
"businessCode":"002",
"businessName":"办电",
"businessType":"缴费",
"businessHallName":"城南"
},
{
"businessCode":"003",
"businessName":"开户",
"businessType":"业务",
"businessHallName":"城南"
}
]
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时间静止不是简史

感谢你的肯定, 我将继续努力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值