【问题标题】:convert a string into python or json dictionary whose keys are not quoted将字符串转换为不带引号的键的 python 或 json 字典
【发布时间】:2017-11-27 08:50:13
【问题描述】:

想象一下python中的以下内容(使用2.7):

myString = '{ key: "value" }'

"value" 可以是一个简单的字符串、一个列表、一个布尔值或另一个字典,每个都用双引号括起来

如果我尝试将其转换为 python 字典或 json,我会失败,因为原始字符串中的键没有被引用。

例如:

  • ast.literal_eval(myString) 导致:IndentationError: unexpected indent 或 ValueError: malformed string(取决于 myString 的复杂性)
  • eval(myString) 导致:NameError: name 'AbsolutePath' is not defined
  • json.loads(myString) 导致:ValueError: Expecting property name 用双引号括起来 ...

实际上,我正在从页面中抓取的 javascript 中的 var 声明中获取此字符串。 myString 可以存储一个包含 50 到 100 个条目的字典。

我不相信这与在其他地方询问的相同,因为键未引用而值是。

【问题讨论】:

  • import ast import json myString = '{ key: "value" }' print (ast.literal_eval(myString)) print (eval(myString)) print (json.loads(myString))跨度>
  • 通过抓取是否意味着您只是将文字 Javascript 代码拉入字符串?我不确定它的效果如何,如果您可以修改 javascript,请使用 JSON.stringifydemjson 之类的东西进行解码。
  • 嗯...我查看了“可能重复”,但认为这是同一问题的另一种变体,但需要不同的解决方案。是的,我所说的“抓取”是指将 Javascript 代码拉入字符串中。我不能轻易修改 javascript,但我想如果必须,我会的。
  • 我确实认为您将不得不修改代码并导出 JSON 而不是阅读它。就目前而言,您基本上是在尝试将一行 Javascript 代码直接转换为 Python 代码,这将成为一个问题,它们的设计初衷不是可互操作的。最好使用定义的中间格式(即 JSON)并在 Python 中解析它。但也许有人知道我不知道的事情并且会回答。

标签: javascript json python-2.7


【解决方案1】:

如果您确定只有第一个 key 没有引号,那么如果您只是手动在字符串中添加引号怎么办? 像这样:

modified_strings_list=[]    
for string in string_list:
    string = string.replace('{','{"', 1)
    string = string.replace(':','":', 1)
    modified_strings_list.append(string)

然后申请eval()

然后任何空格都可以通过循环dict.keys() 轻松地被strip() -ed

【讨论】:

  • 虽然我的示例可能只有一个条目,但我可以有 50 多个。用 '";' 替换 ":"一方面可以工作,另一方面不是固定的字符串替换。
  • 你能举个多入口的例子吗?
猜你喜欢
  • 2022-07-20
  • 2019-03-07
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
  • 2017-02-08
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
相关资源
最近更新 更多