一个 json 字符串的 value 内部含有双引号怎么处理=。=

2016-09-19 14:47:15 +08:00
 Chyroc

如题。

15430 次点击
所在节点    Python
35 条回复
Zzzzzzzzz
2016-09-19 15:16:46 +08:00
pyparsing 有个 json 的例子, 拿来改一下可以处理.

不过你最好能让给你吐 json 的给吐合法 json, 不然碰到{"x": "y","z":"x"}这种怎么定性是 x=y, z=x 还是 x=y","z":"x
dofy
2016-09-19 15:17:01 +08:00
你这不合法的数据哪来的?手动写的吗?
Chyroc
2016-09-19 15:17:01 +08:00
@klgd 数据发送者正在研究发爬虫技术呢 2333
lxy
2016-09-19 15:18:32 +08:00
如果要兼容你这种格式,那么一个字符串就可能有多种“合法”解释。
比如 {"title":"this is title ", "h":"ello."} 这一串。
解释 1 :
{
"title": "this is title ",
"h": "ello."
}
解释 2 :
{
"title": "this is title \", \"h\":\"ello."
}
wizardforcel
2016-09-19 15:19:58 +08:00
garbage in garbage out

把不合法的输入强行解释成合法是不对的。
czheo
2016-09-19 15:21:50 +08:00
klgd
2016-09-19 15:26:26 +08:00
@Chyroc 呃,那就只能考虑正则匹配,自己重新组织 json 数据了
YuJianrong
2016-09-19 15:28:19 +08:00
为什么要支持不合法的输入?难道不是应该让输入方改到合法吗!
xieranmaya
2016-09-19 15:28:44 +08:00
人家库是给你把一个内置的对象转成 JSON 的时候会自动转义,你直接给个不合法的 json 字符串肯定没有库能帮你解析了。。。想什么呢
laoyur
2016-09-19 16:14:33 +08:00
你直接跟领导反映说:这个锅我不背,传过来的 json 就是不合法的,怎么指望我按照正常的来处理?
这就好比我是装备空调的,采购过来的压缩机本来就是坏的,居然还要指望我装出一台合格的空调来,有没有这个道理?
kingddc314
2016-09-19 16:30:05 +08:00
只要是个 JSON 序列化库都会转义,难道作者是手动拼 JSON 格式?
raysonx
2016-09-19 16:54:15 +08:00
坐等楼主的“兼容”解析器被注入。
learnshare
2016-09-19 17:08:45 +08:00
如果字符串中存在双引号, JSON 的生成代码需要生成:
"key": "value \"VALUE\" value"; // 这个格式

JSON 的解析代码需要解释成:
key = 'value "VALUE" value';

正常来说,使用到的库和框架都会做这种处理,自己写代码也要遵循这个规则,才能兼容。
sampeng
2016-09-19 17:35:10 +08:00
这锅你都想办法去背不是作死吗。。。
rrfeng
2016-09-19 17:38:43 +08:00
最近也在被类似的一个问题折磨……

nginx access log 直接输出的 json ,然后某些特定情况下打印了 postdata ,这里面可能有双引号,但是文件里记录的是 ’\x22 ‘,然后在 json parse 的时候就崩了…… 因为 \x 是不合法的 escape ……

做法是将 \x22 替换成 \\x22 ……

实际上因为还有一层转义(上述都是在 logstash 里),所以是 \\x22 -> \\\x22 ,无比蛋疼

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/307254

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX