使用Python将字符串转换为JSON

Fri*_*ias 375 python string json

我对Python中的JSON有点困惑.对我来说,它看起来像是一本字典,因此我试图这样做:

{
    "glossary":
    {
        "title": "example glossary",
        "GlossDiv":
        {
            "title": "S",
            "GlossList":
            {
                "GlossEntry":
                {
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef":
                    {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我打印dict(json)时,它会出错.

如何将此字符串转换为结构,然后调用json ["title"]以获取"示例词汇表"?

Ign*_*ams 690

json.loads()

import json

d = json.loads(j)
print d['glossary']['title']
Run Code Online (Sandbox Code Playgroud)

  • @ShivamAgrawal:区别在于`.load()`解析文件对象; `.loads()`解析字符串/ unicode对象. (42认同)
  • json.load和json.loads有什么区别? (6认同)
  • j是一个字符串,它也可以创建一个unicode. (4认同)
  • @ShivamAgrawal:正是它所说的[在锡上](https://docs.python.org/2/library/json.html#json.load). (3认同)
  • 困扰我的是这个函数的作者没有编写包装函数来对传入的数据执行类型检查以自动选择要调用的正确函数。我也不喜欢使用的模糊命名法。这是我为解决这个问题而写的:`def read_json(json_data): if (type(json_data) == str): return json.loads(json_data) elif (str(type(json_data)) == "<class '_io .TextIOWrapper'>"): return json.load(json_data)` 我相信这可以改进,但现在你可以在 json 'str' 或 'file' 上调用 `d = read_json(j)`。 (2认同)
  • @JacquesMathieu,嗨,Jacques,感谢你的功能,我做了一个小小的改进,因为我有时会使用字典: def read_json(json_data): if (type(json_data) == str): # 对于字符串 return json.loads(json_data) elif (str(type(json_data)) == "<class '_io.TextIOWrapper'>"): #对于文件 return json.load(json_data) elif (type(json_data) == dict): # 对于字典 return json.loads (json.dumps(json_data)) (2认同)

Hus*_*ain 91

当我开始使用json时,我很困惑,无法弄清楚它有一段时间了,但最后我得到了我想要的东西
这是简单的解决方案

import json
m = {'id': 2, 'name': 'hussain'}
n = json.dumps(m)
o = json.loads(n)
print o['id'], o['name']    
Run Code Online (Sandbox Code Playgroud)


loc*_*jay 19

使用simplejson或cjson进行加速

import simplejson as json

json.loads(obj)

or 

cjson.decode(obj)
Run Code Online (Sandbox Code Playgroud)


kak*_*ion 15

如果您信任数据源,则可以使用eval将字符串转换为字典:

eval(your_json_format_string)

例:

>>> x = "{'a' : 1, 'b' : True, 'c' : 'C'}"
>>> y = eval(x)

>>> print x
{'a' : 1, 'b' : True, 'c' : 'C'}
>>> print y
{'a': 1, 'c': 'C', 'b': True}

>>> print type(x), type(y)
<type 'str'> <type 'dict'>

>>> print y['a'], type(y['a'])
1 <type 'int'>

>>> print y['a'], type(y['b'])
1 <type 'bool'>

>>> print y['a'], type(y['c'])
1 <type 'str'>
Run Code Online (Sandbox Code Playgroud)

  • 否。您*切勿*将输入数据视为代码。这可能是您使用信任数据的小项目,但是在真实项目中可以重复使用错误的代码,并重复错误的做法,从而留下大量的安全代码。 (2认同)
  • 如果数据源是您自己的,您可以完全信任它。这对于将字符串化的 JS 对象转换为 dic 到正确的 JSON 字符串实际上很有用。 (2认同)