当前位置: 首页 > 知识库问答 >
问题:

json。不替换撇号的加载

相弘方
2023-03-14

我有一个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) 在我的字符串中转义撇号的最佳方法是什么,这样它们就不会导致错误,但仍然显示在加载中?

我在我的大to字符串上使用了一个json测试仪来确认没有其他错误会阻止对象正常工作,但事实并非如此。

谢啦

共有2个答案

叶翰林
2023-03-14

如果您的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();
}
柳弘方
2023-03-14

Json使用"作为格式化字符,所以response.text.replace ("'", '"')只会损坏文件。Json将字符串中的引号转义为\",所以这应该可以工作:

response = json.loads(response.text.replace("'", '\\"'))
 类似资料:
  • 问题内容: 我正在使用参数化查询将我的经典ASP转换为.Net。我的问题是在我的经典应用程序中,我将用等号替换为撇号 现在,我想用真正的撇号替换数据库中的该值。我不确定语法应该如何做到这一点。我可以找到,但不确定如何替换。以下是我试图解决该错误的简单更新。 更新tblCustomer设置名称= replace(Name ,,’‘’) 问题答案: 加倍撇号以字符串文字形式将其转义 或使用功能

  • 问题内容: 我有一个文件“ test.txt”,其中包含以下内容 我要做的是将它们替换为: 但是为什么这段代码不起作用? 什么是正确的方法? 问题答案: 使用代替。并添加标志以替换所有内容。

  • 问题内容: 我有一个带有Name字段的Web表单,我希望它能够接受单撇号,例如名称O’Leary,但是当尝试将此记录推送到SQL 2005服务器时,出现错误。我的问题不是这个。这就是当我尝试使用此语句将记录插入到数据库中时… 我在数据库中得到了O’‘Leary,而不是O’Leary。认为SQL应该将这些双单撇号视为一个撇号??? 问题答案: 使用参数化查询会更好。这些将自动处理单引号,并更好地保护

  • 问题内容: 样例代码: 它适用于 PHP 5.5.3, 但对于较低版本的PHP则失败 它可以在我的装有PHP 5.5.3的计算机上使用,但是在其他地方都无法使用。 我知道这是错误的JSON,但我的网络服务向我提供了带有符号的JSON 和 沙盒 如何在PHP 5.3中使用撇号解析JSON数据? 显然,我要解析的原始JSON更复杂。 (我无法在生产服务器上升级PHP,也无法从Web服务获取正确的JSO

  • 问题内容: 我似乎有问题。我有一个查询字符串,其值可以包含单引号。这将中断查询字符串。因此,我试图进行替换以更改为。 这是一个示例代码: 输出仍然是: 它认为我只是对引号进行转义。 所以我尝试了这两段代码: 上面的两个STILL结果都相同: 我似乎只能得到这实际上吐出一个斜线: 结果是: 有什么建议?我只是想更换一个同。 似乎应该没有那么困难。 问题答案: 首先,如果您要对查询字符串编码撇号,则需

  • 本文向大家介绍xml 撇号和引号,包括了xml 撇号和引号的使用技巧和注意事项,需要的朋友参考一下 示例 属性值可以用单引号或双引号出现。适当的字符必须转义。