我正在加载一个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测试器来确认没有其他错误可以阻止对象正常工作,但没有。
由于
答案 0 :(得分:2)
Json使用"
作为格式化字符,因此response.text.replace("'", '"')
只是破坏了文件。 Json将字符串中的引号转义为\"
,因此这应该有效:
response = json.loads(response.text.replace("'", '\\"'))
答案 1 :(得分:0)
如果您的json没有采用特殊字符,请将其转换为Unicode
label: for (int i = 0; i < x; i++) {
for (int j = 0; j < i; j++) {
if (something(i, j)) break label; // jumps out of the i loop
}
}
// i.e. jumps to here