在字符串中转义引号

37

我有一个Python字典,例如:

[{"pk":"1","name":"John","size":"1/4" "},{},{},etc]

那个尺寸是1/4英寸,我该如何“转义”引号,以便仍然将其显示为1/4"?

它是一组物品的列表,因此我无法手动编写像1/4\"这样的代码, 我尝试使用replace('"','\"')

编辑: 原始列表是我的Django模型中的文本字段:

[{'pk': '91', 'size': '', 'name': 'Thread Flat For BF', 'quantity': '2'}, {'pk': '90', 'size': '', 'name': 'Blade Holders Straight ', 'quantity': '26'},{'size':'3"','name':'2m 1/4" Round bar', 'quantity':'43'},{'size':'5','name':'2m 1/8" Round bar', 'quantity':'4'}]

接下来我需要为jQuery准备列表,所以我将其替换为正确的json语法,如下所示: mat_list = manufactured_part.material_list.replace("'",'"')

然后我得到了这个列表:

[{"pk": "91", "size": "", "name": "Thread Flat For BF", "quantity": "2"}, {"pk": "90", "size": "", "name": "Blade Holders Straight ", "quantity": "26"},{"size':"3"","name':"2m 1/4" Round bar", "quantity":"43"},{"size":"5","name":"2m 1/8" Round bar", "quantity":"4"}]

现在列表已经传递到模板中,我使用jquery循环遍历它,但由于字符串中的 " ,列表被破坏了。

所以...我需要转义这些 " 使列表正常工作,否则会有显而易见的语法错误。

希望现在已经讲清楚了。

谢谢。


2
你真正想问什么? - Ignacio Vazquez-Abrams
2
我在询问如何保留带有英寸符号的列表。 - Harry
1
是的,不要这样。退回一两步并解释你真正想要实现什么 - Ignacio Vazquez-Abrams
1
我有点困惑你的问题。你能给出更清晰的输入和输出吗?我真的不知道你想要什么。 - winterTTr
2
json.dumps(string_w_quotes) 是正确的方法。请参考以下答案:https://dev59.com/QmMk5IYBdhLWcg3w3xvq#18886842 - PJ_Finnegan
显示剩余3条评论
5个回答

68

为了让反斜杠打印出来,您需要在替换中转义它。尝试使用

replace('"','\\"')

4
谢谢,我用了 replace('"','"') ,现在它能够与你的解决方案一起工作了。 - Harry
3
请注意这个问题。例如,设置示例字符串foo='hurr"durr\\',使用print('string is "%s"' % foo.replace('"','\\"'))将打印string is "hurr\"durr\",而print('foo="%s"' % foo.replace('"','\"'))则变为string is "hurr"durr\" - luckydonald
1
@luckydonald 你说得对,但是可以通过回溯测试反斜杠来避免这个问题,类似于 re.sub(r"(?<!\)'","\'", foo)。 - rloth
1
也许在回答问题时缺少了关键细节,但这个答案是错误的建议 - 如果标准库中已经存在一个好的JSON序列化程序,那么OP自己编写有缺陷的JSON序列化程序就没有意义。 - Anentropic
1
@stema 非常感谢!我一开始用的是一个斜杠,非常困惑,为什么双斜杠可以代替一个呢? - Ulvi
显示剩余2条评论

6

5

不需要用困难的方式来做。让Django为您序列化查询集。


2

你说:

我需要为 jQuery 准备列表

所以我猜测你正在尝试将 Python 对象以字符串形式输出到模板文件中,转换后使输出的字符串成为有效的 JavaScript 代码。

这相当于将它们序列化为 JSON 格式。

这是一个已解决的问题,不要自己替换单引号为双引号等操作,只需执行以下操作:

import json

my_python_data = [{'pk': '91', 'size': '', 'name': 'Thread Flat For BF', 'quantity': '2'}, {'pk': '90', 'size': '', 'name': 'Blade Holders Straight ', 'quantity': '26'},{'size':'3"','name':'2m 1/4" Round bar', 'quantity':'43'},{'size':'5','name':'2m 1/8" Round bar', 'quantity':'4'}]

str_to_output_in_js_template = json.dumps(my_python_data)

这将为您处理所有的转义,并确保结果是一个有效的Javascript对象。

然后你必须转义单引号 - pstanton
@pstanton 是的,但只有在手写对象字面量时才可以这样做。 - Anentropic

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接