返回介绍

3.2 JSON 数据

发布于 2024-01-27 21:43:11 字数 3750 浏览 0 评论 0 收藏 0

JSON 数据是数据传输最常用的格式之一。人们喜欢这一格式,是因为它结构清晰、易于阅读且方便解析。网站在向页面的 JavaScript 传输数据时,JSON 也是最常用的数据格式之一。许多网站都提供了支持 JSON 的 API,我们会在第 13 章讲到。本节会继续使用全球预期寿命的数据。WHO 并没有提供这一数据的 JSON 格式,但我们为本书创建了 JSON 版本的数据,你可以在代码仓库(https://github.com/jackiekazil/data-wrangling)中找到。

 如果文件的扩展名是 .json,那里面包含的可能是 JSON 数据。如果文件扩展名是 .js,那可能是 JavaScript 文件,但在少数情况下也可能是命名不规范的 JSON 文件。

在代码编辑器里打开这个 JSON 文件,你会发现每一条数据记录都很像一个 Python 字典。每一行都有键和值,用 : 分隔,数据条目之间用 , 分隔。首尾还有花括号包围 {}。这是 JSON 文件的一条数据记录:

[
  {
  "Indicator":"Life expectancy at birth (years)",
  "PUBLISH STATES":"Published",
  "Year":1990,
  "WHO region":"Europe",
  "World Bank income group":"High-income",
  "Country":"Andorra",
  "Sex":"Both sexes",
  "Display Value":77,
  "Numeric":77.00000,
  "Low":"",
  "High":"",
  "Comments":""
  },
]

JSON 文件有时看起来和字典完全相同,这与输出格式有关。在上面的示例中,每一个数据条目就是一个 Python 字典(首尾由 { 和 } 包围),这些字典又包含在一个列表中,列表首尾由 [ 和 ] 包围。

如何导入JSON数据

在 Python 中导入 JSON 文件比导入 CSV 文件还要简单。下面的代码将对一个 JSON 数据文件执行打开、加载、导入与输出的操作:

import json                ➊

json_data = open('data-text.json').read()  ➋

data = json.loads(json_data)         ➌

for item in data:              ➍
  print item

❶ 导入 Python 的 json 库(https://docs.python.org/2/library/json.html),我们用它来处理 JSON 文件。

❷ 利用 Python 内置的 open 函数打开 JSON 文件。文件名叫作 data-text.json(这是 open 函数的第一个参数)。本行代码还调用了已打开文件的 read 方法,用来读取该文件,并将读取的内容保存在变量 json_data 中。

❸ 利用 json.loads() 将 JSON 数据载入 Python,并将输出保存在变量 data 中。

❹ 利用 for 循环遍历所有数据,并打印出每一项,这也是本例代码的输出。

在命令行中运行 python import_json_data.py,输出是一个字典,里面包含 JSON 文件中每一条数据记录。这个输出应该和 CSV 的最终输出基本相同。一定要记得将数据文件复制到脚本所在的文件夹,或者将脚本中的文件路径修改为文件实际所在的位置。

在 CSV 一节的最后,我们学习了如何保存文件并在命令行中运行。在本例中,我们从一个空白文件开始,逐步完成这项任务。

首先来快速看一下总体步骤。

(1) 在代码编辑器中创建一个新文件。

(2) 将文件保存为 import_json_data.py,与你的代码位于同一个文件夹下。

(3) 将数据移动(或保存)到代码所在的文件夹。(一定要重命名数据文件,使其与代码中的文件名相同。本书用的文件名是 data-text.json。)

(4) 回到代码编辑器,import_json_data.py 文件应该还处于打开状态。

我们来通读代码,并将其与导入 CSV 的代码文件作对比。首先,导入 Python 内置的 json 库:

import json

然后用学过的 open 函数打开 data-text.json 文件,并调用已打开文件的 read 方法:

json_data = open('data-text.json').read()

在 CSV 文件的例子中,我们并没有调用 read。二者的区别在哪里?在 CSV 的例子中,我们以只读方式打开文件;但在 JSON 的例子中,我们读取文件的内容,并将其保存在变量 json_data 中。在 CSV 的例子中,open 函数返回的是一个文件对象;但在 JSON 的例子中,我们首先打开文件,然后读取文件,所以得到的是一个 str(字符串)。二者的不同是基于下列事实:Python 的 json 库和 csv 库处理输入数据的方式不同。如果你试着将一个字符串传递给 CSV reader,Python 会报错;如果你把文件对象传递给 JSON 的 loads 函数, Python 也会报错。

好消息是,在 Python 中将字符串写入文件非常简单(比如说,你只有字符串,但想使用 CSV reader 来读取),将文件读取成字符串也非常简单。对 Python 来说,一个关闭的文件只是一个文件名字符串,等待被打开并读取。从文件中获取数据、将数据变成字符串并将字符串传递给函数,只需要几行 Python 代码即可完成。

进入保存 JSON 文件的文件夹,你可以在 Python 解释器中输入下面的代码,看一下前面两个例子中输出对象的类型:

filename = 'data-text.json'
type(open(filename, 'rb'))  # 与csv的代码类似
type(open(filename).read()) # 与json的代码类似

Python json 库的 loads 函数接收字符串作为参数,不接收文件作为参数。Python csv 库的 reader 函数接收打开的文件作为参数。在脚本的下一行代码中,我们将使用 loads 函数,将 JSON 字符串载入 Python。这一函数的输出被赋值给名为 data 的变量:

data = json.loads(json_data)

想要预览数据,我们对每一项进行遍历并将其打印出来。这段代码并不是必需的,但可以帮我们预览数据,检查数据的格式是否正确:

for item in data:
  print item

写完上述代码后,保存文件并运行。如你所见,在 Python 中打开 JSON 文件并将其转换成由字典组成的列表是非常容易的。下一节将探索更多自定义文件的处理方法。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文