当前位置: 首页>>技术教程>>正文


如何将数据从JSON解析为Python

, , ,

目的

在Python中解析JSON数据。

发行版

这将适用于任何Linux发行版。

要求

使用Python可以正常工作的Linux安装。

困难

简单

约定

  • -要求linux命令可以直接以root用户身份或通过使用root特权以root特权执行sudo命令
  • $-要求linux命令以常规non-privileged用户身份执行

介绍

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转换成字典。该字典可以用作字典,也可以在实例化以将数据传输到新对象时将其导入到对象中。

练习题

  1. 创建一个新的Python文件,导入JSON
  2. 以字符串形式创建字典以用作JSON
  3. 使用JSON模块将您的字符串转换为字典。
  4. 编写一个类以从您的字符串中加载数据。
  5. 从您的类实例化一个对象,并从中打印一些数据。
  6. 创建一个包含一些JSON的JSON文件。
  7. 将您的JSON文件导入Python并遍历结果数据。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/7646.html,未经允许,请勿转载。