【发布时间】:2019-10-06 19:11:30
【问题描述】:
请参阅以下来自源的响应 JSON。来源不灵活,无法在其末尾进行更改。挑战在于解码“结果”中的键值对。
{"result":"{\"key1\" : \"value with \"n,a.\".\" , \"key2\":\"value with \"n.a.\".\" }"}
结果中的嵌套 JSON:
{"key1" : "value with "n,a."." , "key2":"value with "n.a."."}
我正在使用python进行解码。
json_string = '{\"result\":\"{\\"key1\\" : \\"value with \\"n,a.\\".\\" , \\"key2\\":\\"value with \\"n.a.\\".\\"}\"}'
#The following string with no double quotes within value part works as expected
#json_string = '{\"result\":\"{\\"key1\\" : \\"value with n,a.\\" , \\"key2\\":\\"value with n.a. .\\"}\"}'
data1 = json.loads(json_string)
data1['result']
# '{"key1" : "value with "n,a."." , "key2":"value with "n.a."."}'
data_dict_string = data1['result']
json_stringp = "[{0}]".format(data_dict_string)
data_list = json.loads(json_stringp)
如预期的那样存在双引号会导致以下错误,
JSONDecodeError: Expecting ',' delimiter: line 1 column 25 (char 24)
如何去除 JSON 值部分的双引号?
【问题讨论】:
-
来自“源”的 JSON 已损坏,可能无法自动修复。
-
来源已经接受了这个缺陷,但表示他们最终无法处理它
-
好吧,他们违反了标准,他们修复了它。就是这么简单。您首先在计算机科学中学到的一件事是,该陈述不必是真的。
-
您也可以编写一些启发式方法来最终修复它,但在某些特殊情况下肯定会失败。例如。您可以将
", " .... ": "作为值内的文本,这是完全合法的,并且没有进一步了解内容,您无法判断这是否只是值的一部分或定义了新的键、值对。标准的存在是有原因的。 -
我投票决定将此问题作为离题结束,因为它寻求解决组织(如果不是法律)问题的技术解决方案。