【发布时间】:2015-05-30 23:39:18
【问题描述】:
我有一个 json 对象,我正在加载并用双引号替换单引号。其语法为:
response = json.loads(response.text.replace("'", '"'))
在我的数据中,我有采用以下格式的键/值对:
"name":"John O'Shea"
这导致我得到以下回溯:
Traceback (most recent call last):
File "C:\Python27\Whoscored\Test.py", line 204, in <module>
response = json.loads(response.text.replace("'", '"').replace(',,', ','))
File "C:\Python27\lib\json\__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "C:\Python27\lib\json\decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Python27\lib\json\decoder.py", line 382, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting ',' delimiter: line 1 column 7751 (char 7750)
我实际上并不想替换上述名称中的撇号,但我原以为我的 json.loads 语句会将我的键/值对转换为:
"name":"John O"Shea"
我假设这也会失败。我需要知道的是:
1) 为什么我的 json.loads 语句在加载过程中没有替换字符串中的撇号? 2) 在我的字符串中转义撇号以使其不会导致错误但仍显示在负载中的最佳方法是什么?
我在较大的字符串上使用了一个 json 测试器,以确认没有其他错误会阻止对象正常工作,但实际上没有。
谢谢
【问题讨论】:
-
为什么要替换撇号?
"John O'Shea"是一个包含John O'Shea的完全有效的字符串。 -
但是您正在调用
repace,它正在替换它们,这就是您收到该错误的原因。我不明白你为什么要首先这样做,或者你期望发生什么。 -
显示
response.text[7745:7755] -
看看here