【问题标题】:Converting String dictionary like to dictionary [duplicate]将字符串字典转换为字典[重复]
【发布时间】:2018-01-30 10:54:11
【问题描述】:

我的字符串看起来像这样的字典:

{"h":"hello"}

我想按照here的指示将其转换为实际字典

>>> import json
>>> 
>>> s = "{'h':'hello'}"
>>> json.load(s)

然而,我得到了一个错误:

Traceback(最近一次调用最后一次):文件“”,第 1 行,in 文件 "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/init.py", 第 286 行,加载中 返回负载(fp.read(),

AttributeError: 'str' 对象没有属性 'read'

我的代码有什么问题,以及如何将字典之类的字符串转换为实际的字典?谢谢。

【问题讨论】:

  • json.load 是一个文件,但那是无效的 json 反正json.loads 不会工作
  • 对于投票关闭为错字的人:这不是题外话错字,因为它是有效的python,只是无效的json

标签: python json dictionary


【解决方案1】:

您想使用loads 而不是load

json.loads(s)

loads 接受一个字符串作为输入,而load 接受一个可读对象(主要是一个文件)

json 也使用双引号来引用'"'

s = '{"a": 1, "b": 2}'

你有一个live example

【讨论】:

  • 非常感谢它运行良好 :)
【解决方案2】:

我更喜欢ast.literal_eval

import ast

ast.literal_eval('{"h":"hello"}')  # {'h': 'hello'}

请参阅this explanation,了解为什么应该使用ast.literal_eval 而不是eval

【讨论】:

    【解决方案3】:
    >>> import ast
    >>> s = "{'h':'hello'}"
    >>> ast.literal_eval(s)
    {'h': 'hello'}
    

    【讨论】:

      【解决方案4】:

      eval 函数允许您运行代码并使用结果。 它通常用于将字符串解释为代码。

      string = '{"a": 1, "b": 2}'
      dct = eval(string)
      

      有关eval的更多信息,请参阅the W3school explanatino on eval()

      免责声明:如果您正在为广泛的用户群构建网站,请告知您自己Code injection risks of eval before using it.

      【讨论】:

      猜你喜欢
      • 2019-11-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-06
      • 2019-10-25
      • 2021-12-01
      • 1970-01-01
      • 2012-11-20
      • 2021-08-21
      相关资源
      最近更新 更多