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