json.loads没有替换撇号

问题描述 投票:0回答:2

我有一个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测试器来确认没有其他错误可以阻止对象正常工作,但没有。

谢谢

python json
2个回答
2
投票

Json使用"作为格式化字符,因此response.text.replace("'", '"')只是破坏了文件。 Json将字符串中的引号转义为\",因此这应该有效:

response = json.loads(response.text.replace("'", '\\"'))

0
投票

如果你的json没有采取特殊字符更好地将它们转换为Unicode

private static String escapeNonAscii(String str) {

    StringBuilder retStr = new StringBuilder();
    for(int i=0; i<str.length(); i++) {
        int cp = Character.codePointAt(str, i);
        int charCount = Character.charCount(cp);
        if (charCount > 1) {
            i += charCount - 1; // 2.
            if (i >= str.length()) {
                throw new IllegalArgumentException("truncated unexpectedly");
            }
        }

        if (cp < 128) {
            retStr.appendCodePoint(cp);
        } else {
            retStr.append(String.format("\\u%x", cp));
        }
    }
    return retStr.toString();
}
© www.soinside.com 2019 - 2024. All rights reserved.