如题。
1
s0f Sep 19, 2016
字符串转义啊 '{"a":"\"123"}'
|
3
skydiver Sep 19, 2016
解码库会自动帮你做转义和反转义,不需要自己处理
|
5
Chyroc OP 语言: python
|
7
gdtv Sep 19, 2016 php 果然是世界上最好的语言,自带的 json_decode 和 json_encode 函数会自动处理这些问题,完全不用担心
|
12
bazingaterry Sep 19, 2016
我帮题主重新描述一下问题:一个忘记转义的 JSON 字符串怎么修复?
|
14
lgh06 Sep 19, 2016
JS 路过 外面用单引号
var tmp = JSON.stringify('{"title":"this is title "hello" ."}'); var res = JSON.parse(tmp); JSON.stringify(res) |
16
lgh06 Sep 19, 2016
import json
json.dumps('{"title":"this is title "hello" ."}') |
18
lgh06 Sep 19, 2016
好吧 好像并不行……
|
19
gdtv Sep 19, 2016
{"title":"this is title "hello" ."} 这个不是 json 字符串,所以楼主的问题应该改成“任意一个字符串怎么格式化成标准的 json 格式?”
|
20
klgd Sep 19, 2016
不合法这个问题应该从根源解决,让数据产生者发送合法的 json 数据,我觉得这是解决问题的正确途径
|
21
Zzzzzzzzz Sep 19, 2016
pyparsing 有个 json 的例子, 拿来改一下可以处理.
不过你最好能让给你吐 json 的给吐合法 json, 不然碰到{"x": "y","z":"x"}这种怎么定性是 x=y, z=x 还是 x=y","z":"x |
22
dofy Sep 19, 2016 via iPhone
你这不合法的数据哪来的?手动写的吗?
|
24
lxy Sep 19, 2016
如果要兼容你这种格式,那么一个字符串就可能有多种“合法”解释。
比如 {"title":"this is title ", "h":"ello."} 这一串。 解释 1 : { "title": "this is title ", "h": "ello." } 解释 2 : { "title": "this is title \", \"h\":\"ello." } |
25
wizardforcel Sep 19, 2016 garbage in garbage out
把不合法的输入强行解释成合法是不对的。 |
26
czheo Sep 19, 2016
@wizardforcel +1
|
28
YuJianrong Sep 19, 2016
为什么要支持不合法的输入?难道不是应该让输入方改到合法吗!
|
29
xieranmaya Sep 19, 2016
人家库是给你把一个内置的对象转成 JSON 的时候会自动转义,你直接给个不合法的 json 字符串肯定没有库能帮你解析了。。。想什么呢
|
30
laoyur Sep 19, 2016
你直接跟领导反映说:这个锅我不背,传过来的 json 就是不合法的,怎么指望我按照正常的来处理?
这就好比我是装备空调的,采购过来的压缩机本来就是坏的,居然还要指望我装出一台合格的空调来,有没有这个道理? |
31
kingddc314 Sep 19, 2016
只要是个 JSON 序列化库都会转义,难道作者是手动拼 JSON 格式?
|
32
raysonx Sep 19, 2016
坐等楼主的“兼容”解析器被注入。
|
33
learnshare Sep 19, 2016
如果字符串中存在双引号, JSON 的生成代码需要生成:
"key": "value \"VALUE\" value"; // 这个格式 JSON 的解析代码需要解释成: key = 'value "VALUE" value'; 正常来说,使用到的库和框架都会做这种处理,自己写代码也要遵循这个规则,才能兼容。 |
34
sampeng Sep 19, 2016
这锅你都想办法去背不是作死吗。。。
|
35
rrfeng Sep 19, 2016
最近也在被类似的一个问题折磨……
nginx access log 直接输出的 json ,然后某些特定情况下打印了 postdata ,这里面可能有双引号,但是文件里记录的是 ’\x22 ‘,然后在 json parse 的时候就崩了…… 因为 \x 是不合法的 escape …… 做法是将 \x22 替换成 \\x22 …… 实际上因为还有一层转义(上述都是在 logstash 里),所以是 \\x22 -> \\\x22 ,无比蛋疼 |