目的
在Python中解析JSON数据。
发行版
这将适用于任何Linux发行版。
要求
使用Python可以正常工作的Linux安装。
困难
简单
约定
介绍
JSON是开发人员最喜欢的用于序列化数据的工具。它在网络上的大多数公共API中都使用过,这是在程序之间传递数据的好方法。 Python读取JSON没问题。
设定
在Python中开始使用JSON之前,您需要使用一些JSON。首先需要设置一些内容。首先,创建一个Python文件,该文件将保存这些练习的代码。在文件内部,导入JSON模块。
import json
然后,创建一些基本的JSON。它与字典共享几乎相同的语法,因此制作字典,Python可以将其用作JSON。
json_data = '{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}'
接下来您需要的是JSON文件。如果您不熟悉,它们是带有.json
延期。使用您选择的文本编辑器创建一个并命名distros.json
。将JSON放在文件中
[
{
"Name": "Debian",
"Version": "9",
"Install": "apt",
"Owner": "SPI",
"Kernel": "4.9"
},
{
"Name": "Ubuntu",
"Version": "17.10",
"Install": "apt",
"Owner": "Canonical",
"Kernel": "4.13"
},
{
"Name": "Fedora",
"Version": "26",
"Install": "dnf",
"Owner": "Red Hat",
"Kernel": "4.13"
},
{
"Name": "CentOS",
"Version": "7",
"Install": "yum",
"Owner": "Red Hat",
"Kernel": "3.10"
},
{
"Name": "OpenSUSE",
"Version": "42.3",
"Install": "zypper",
"Owner": "Novell",
"Kernel": "4.4"
},
{
"Name": "Arch Linux",
"Version": "Rolling Release",
"Install": "pacman",
"Owner": "SPI",
"Kernel": "4.13"
},
{
"Name": "Gentoo",
"Version": "Rolling Release",
"Install": "emerge",
"Owner": "Gentoo Foundation",
"Kernel": "4.12"
}
]
解析简单的JSON
一切准备就绪。返回到您先前创建的JSON简单行。这就是您首先要使用的内容。
Python使用loads
的方法json
从字符串加载JSON。您是否注意到您为JSON创建的字典周围的引号?这是因为Python会将JSON视为字符串,除非它来自文件。您实际上并不需要过多担心。只知道这种形式在处理数据的同时load
处理文件。尝试加载并打印JSON数据:
parsed_json = (json.loads(json_data))
print(json.dumps(parsed_json, indent=4, sort_keys=True))
看起来并没有什么不同,但是Python现在以一种可用的形式看到了它。您可以将其保存到变量并对其进行迭代以查看。
loaded_json = json.loads(json_data)
for x in loaded_json:
print("%s: %d" % (x, loaded_json[x]))
如你看到的,loaded_json
包含字典,而不是看起来像一个字符串的字符串。
解析为对象
JSON实际上是JavaScript中的对象,因此将其作为Python对象导入是有意义的。有几种方法可以执行此操作,但是大多数方法都涉及创建一个类,该类可以通过使用JSON中的数据填充来实例化。确实没有直接转换。
通过将JSON加载到对象的JSON中,有一种相当直接的方法__dict__
属性。
class Test(object):
def __init__(self, data):
self.__dict__ = json.loads(data)
test1 = Test(json_data)
print(test1.a)
解析JSON文件
您实际上不需要从Python程序中解析JSON。在实用性上这没有多大意义。不过,您将需要从文件中读取并解析它,因此这就是设置它的原因。distros.json
文件。
一种with
可以简化读取和关闭文件的过程,因此这里使用的结构。要注意的另一件事是load
方法替代loads
因为这是一个文件。否则,过程大致相同。
with open('distros.json', 'r') as f:
distros_dict = json.load(f)
for distro in distros_dict:
print(distro['Name'])
总结思想
在Python中解析JSON确实不难。通过使用json.load
方法,您可以将JSON转换成字典。该字典可以用作字典,也可以在实例化以将数据传输到新对象时将其导入到对象中。
练习题
- 创建一个新的Python文件,导入JSON
- 以字符串形式创建字典以用作JSON
- 使用JSON模块将您的字符串转换为字典。
- 编写一个类以从您的字符串中加载数据。
- 从您的类实例化一个对象,并从中打印一些数据。
- 创建一个包含一些JSON的JSON文件。
- 将您的JSON文件导入Python并遍历结果数据。