Python如何将单引号转双引号格式化为json字符串

新手上路,请多包涵

我有一个文件,其中每一行都有这样的文本(代表电影演员表):

 [{'cast_id': 23, 'character': "Roger 'Verbal' Kint", 'credit_id': '52fe4260c3a36847f8019af7', 'gender': 2, 'id': 1979, 'name': 'Kevin Spacey', 'order': 5, 'profile_path': '/x7wF050iuCASefLLG75s2uDPFUu.jpg'}, {'cast_id': 27, 'character': 'Edie's Finneran', 'credit_id': '52fe4260c3a36847f8019b07', 'gender': 1, 'id': 2179, 'name': 'Suzy Amis', 'order': 6, 'profile_path': '/b1pjkncyLuBtMUmqD1MztD2SG80.jpg'}]

我需要将其转换为有效的 json 字符串,因此仅将必要的单引号转换为双引号(例如,不得转换单词 Verbal 周围的单引号,文本中最终的撇号也不应转换)。

我正在使用 python 3.x。我需要找到一个正则表达式,它只会将正确的单引号转换为双引号,从而将整个文本生成一个有效的 json 字符串。任何的想法?

原文由 revy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 540
1 个回答

首先,您给出的示例行不可解析! … 'Edie's Finneran' … 包含语法错误,无论如何。

假设您可以控制输入,您可以简单地使用 eval() 来读入文件。 (虽然,在那种情况下,人们会想知道为什么您不能首先生成有效的 JSON……)

 >>> f = open('list.txt', 'r')
>>> s = f.read().strip()
>>> l = eval(s)

>>> import pprint
>>> pprint.pprint(l)
[{'cast_id': 23,
  'character': "Roger 'Verbal' Kint",
  ...
  'profile_path': '/b1pjkncyLuBtMUmqD1MztD2SG80.jpg'}]

>>> import json
>>> json.dumps(l)
'[{"cast_id": 23, "character": "Roger \'Verbal\' Kint", "credit_id": "52fe4260ca36847f8019af7", "gender": 2, "id": 1979, "name": "Kevin Spacey", "order": 5, "rofile_path": "/x7wF050iuCASefLLG75s2uDPFUu.jpg"}, {"cast_id": 27, "character":"Edie\'s Finneran", "credit_id": "52fe4260c3a36847f8019b07", "gender": 1, "id":2179, "name": "Suzy Amis", "order": 6, "profile_path": "/b1pjkncyLuBtMUmqD1MztDSG80.jpg"}]'

如果您无法控制输入,这是非常危险的,因为它会使您容易受到代码注入攻击。

我怎么强调都不为过,最好的解决方案是首先生成有效的 JSON。

原文由 user3850 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏