一步完美解决Json数据里单引号双引号问题-正则表达式

文章讲述了如何利用正则表达式处理JSON数据中因包含特殊字符(如双引号)导致的解析失败问题。通过特定的正则表达式模式,可以找到并替换影响解析的双引号,从而确保数据在任何开发语言中都能正确解析。文中还提供了一步替换的方法,适用于包含单引号的情况。
摘要由CSDN通过智能技术生成

终于用正则表达式一步完美处理了Json数据里的存在单引号/双引号导致解析失败的报错,这样无论什么开发语言,都可以搞定这个问题了。

事故原因是最近我有一段json数据需要处理,但是在处理时发生了报错:

Newtonsoft.Json.JsonReaderException: After parsing a value an unexpected character was encountered: 直. Path '[0].Value', line 1, position 33.

我的json数据原文如下:

[{"Name":"封装/尺寸","Value":"0.330" 直径 X 0.925" 长(8.38MM X 23.50MM)"},{"Name":"直径","Value":"Φ8.38MM"},{"Name":"阻值","Value":"0.015OHMS"},{"Name":"长度","Value":"23.50MM"},{"Name":"精度","Value":"±1%"},{"Name":"系列","Value":"LVR"},{"Name":"功率","Value":"5W"},{"Name":"工作温度","Value":"-65°C ~ 275°C"}]

可以看到,我标红色的双引号",其实是数据来着,影响了我的json解析,导致解析失败。

那这个双引号其实是数据,该怎么处理呢?

把 双引号(")变成斜杠双引号(\")之后就可以正常解析了。

可以正常解析的json数据应该是这样的:

[{"Name":"封装/尺寸","Value":"0.330\" 直径 X 0.925\" 长(8.38MM X 23.50MM)"},{"Name":"直径","Value":"Φ8.38MM"},{"Name":"阻值","Value":"0.015OHMS"},{"Name":"长度","Value":"23.50MM"},{"Name":"精度","Value":"±1%"},{"Name":"系列","Value":"LVR"},{"Name":"功率","Value":"5W"},{"Name":"工作温度","Value":"-65°C ~ 275°C"}]

那么怎么找出来这个特殊的双引号呢?

我这边就尝试用正则找出它来。

我先尝试获取格式里后面的引号:

  再尝试获取格式里后面的引号:

 可以看到两个正则都不会将内容里的双引号拿到。

然后同时取格式里前后的引号:

可以看到很完美地取到了,并且忽略了内容里的双引号。

此处已经拿到了格式里的引号,直接用以下步骤,就可以替换完成了:

先把格式里的替换成特殊符号:

((?<=({|:|,))("))|(")(?=(}|:|,))   ==替换==>  ★

然后把数据里的替换成加引号的:

"  ==替换==>  \"

把格式里的替换成回来:

★ ==替换==> "

就完成了!

有没有更简单的办法呢?

肯定有的,需要用到排除法:

排除格式里前面的引号:

排除格式里后面的引号:

可以!

把两者结合起来:

 拿到数据里的双引号!

好,现在就可以替换,一步到位:

(?<=([^{:,]))(")(?=([^}:,]))  ==替换==>  \"

 完美加上:


 如果格式里是单引号,同理可以这样找到:

 一步替换:

(?<=([^{:,]))(')(?=([^}:,]))  ==替换==>  \'

 完美!

这个时候,无论你用什么语言,都可以使用这个正则表达式一步替换,对有这样异常的数据进行修正了。

当然,现实中还有其他的各种特殊情况,复杂多变,肉眼可见的格式错乱,但是程序不一定能100%解决。有其他特殊情况,欢迎在评论区留言沟通。

---------------------------------------

补充:

如果引号附近有空格,可以这样修改:

(?<!(\s*[{:,]\s*))(\")(?!(\s*[}:,]\s*))  ==替换==>  \"

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

willgon123

谢谢打赏,我将再接再厉!

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

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

打赏作者

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

抵扣说明:

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

余额充值