如何用 Python 解析 JSON

想知道如何用 Python 解析 JSON?你并不孤单。本指南让读取、编写和解析代码变得易如反掌。

在本快速指南中,我们将介绍 Python 解析的基础知识,解释什么是 JSON,以及如何使用它们来获取所需数据。

什么是解析?

解析是将字符序列转换为抽象语法树的过程。然后,解析器使用这棵树对输入内容执行各种操作,例如检查语法正确性或确定输入内容中是否有任何错误。

在 Haskell 中从头开始解析 Json | Abhinavsarkar.net

最常见的解析器被称为词法解析器,它将字符序列转换为标记(或 "词目")。标记可以是任何对你的语言有意义的东西:它可以是一个标识符,也可以是 "hello "这样的字面字符串,甚至可以是函数调用这样更复杂的东西。 

在将所有词素转换成标记后,您需要决定程序在处理这些词素时应如何处理它们。这个决定取决于你的语言是如何工作的。有些语言没有函数的概念;有些语言可能使用递归和高阶函数;有些语言可能使用闭包或匿名命名空间,等等。 

您还需要确保每个标记不包含一个以上的字符,这样就不会在解析过程中意外创建无限循环。

什么是 JSON?

JavaScript Object Notation is a lightweight data-interchange format that describes objects – via attribute/value pairs – for data storage or transport. For example, let’s say you have a glossary on your website. JSON uses a string to define it. “title” : “example glossary”

JSON 文件的主要类型有哪些?

JSON 文件主要有两种类型:对象和数组。对象是存储任何类型数据的简单方法,而数组则用于存储包含其他对象的对象。 

使用 JSON 有什么好处?

与 XML 或其他格式(如 CSV 或 HTML)相比,使用 JSON 的主要好处是,您不必担心在应用程序中使用任何特殊的解析代码。使用 JSON 时,您必须在页面的正确位置包含包含数据的文件,然后从那里读取数据。这就意味着,无论用户使用何种设备浏览网站,他们都能准确地获取您想要获取的内容。  

什么是 Python?

Python 是一种通用编程语言,可用于多种不同类型的项目。它简单易学,并有大量可用库,让您的生活更轻松。  

Python 还拥有一个活跃的社区,这意味着网上有大量资源可以帮助您入门。

什么是字符串? 

字符串是一串字符。字符是符号,如字母或数字。因此,严格来说,这句话就是一个字符串。 

但计算机不读取字符或符号。它们只读 "1 ""0"--""和 "","非此即彼";换句话说,就是二进制。 

尽管您在计算机屏幕上看到的是字符,但在幕后,计算机正在将字符转换或编码为 1 和 0。这一过程的反向(二进制转化为字符)称为解码。 

简单地说,Python 字符串是将人类命令转换成计算机能理解的二进制语言的字符序列。 

Python 中的模块是什么? 

模块将大型程序分解成易于管理、有条理的小文件。在 Python 中,模块指的是包含 Python 语句和定义的文件。例如,包含 example.py 等 Python 代码的文件就是一个模块。它的模块名称是 "example"。 

如何用 Python 解析 JSON。

您可以使用 Python 的 JSON 模块来处理 JSON(包含 JSON 对象的字符串或文件)。在使用该模块之前,请先导入它。

导入 json

JSON 模块可轻松解析 JSON 字符串和包含 JSON 对象的文件。

有很多方法可以从以 JSON 对象符号(或其他形式)格式化的字符串中解析出相同的信息。 

最简单的方法是使用内置函数 "json"。该函数接受一个名为 "缩进 "的可选参数,用于指定解析输入数据时的缩进程度。 

如果为 "无",则不会缩进。否则,它将在每一行新代码前添加至少一个空格。 

这种方法适用于只想从值列表中提取一个值或从字典结构中提取一个键/值对的简单情况。 

但如果您需要从同一结构中提取多个值,或者想将 JSON 字符串解析为包含嵌套结构的 Python 字典,该怎么办呢?在这种情况下,最好使用 "json.loads "方法。

json.loads 方法

import json
person = '{"name": "Steve", "languages": ["English", "French"]}'
person_dict = json.loads(person)
# Output: {'name': 'Steve', 'languages': ['English', 'French']}
print( person_dict)
# Output: ['English', 'French']
print(person_dict['languages'])

这里,"person "是一个 JSON 字符串,而 person_dict 是一个字典。

这将以字典形式返回输入数据中的所有键和值。如果不存在键,则该键/值对将返回 "无"。与每个键/值对相关的值是通过查找其名称的字典条目来确定的。

Python 读取 JSON 文件

您可以使用 json.load 方法读取包含 JSON 对象的文件。

{"name": "Steve", 
"languages": ["English", "French"]
}

下面是解析该文件的方法:

import json
with open('path_to_file/person.json', 'r') as f:
data = json.load(f)
# Output: {'name': 'Steve', 'languages': ['English', 'French']}
print(data)

将 Python 转换为 JSON 字符串

您可以使用 json.dumps 方法将字典转换为 JSON 字符串。

import json
person_dict = {'name': 'Bob',
'age': 12,
'children': None
}
person_json = json.dumps(person_dict)
# Output: {"name": "Bob", "age": 12, "children": null}
print(person_json)

将 JSON 写入文件 

要在 Python 中将 JSON 写入文件,我们可以使用 json.dump() 方法。

import json
person_dict = {"name": "Steve",
"languages": ["English", "French"],
"married": False,
"age": 33
}
with open('person.txt', 'w') as json_file:
  json.dump(person_dict, json_file)

在上述程序中,我们使用 "w "以写入模式打开了名为 person.txt 的文件。如果该文件不存在,它将创建一个。然后,json.dump 会将 person_dict 转换为 JSON 字符串,并保存到 person.txt 文件中。

运行程序后,程序会创建 person.txt 文件。文件中包含以下文本。

{"name": "Steve", "languages": ["English", "French"], "married": false, "age": 33} 

Python Pretty Print JSON

为了分析和调试 JSON 数据,我们可能需要将其打印成更易读的格式。为此,您可以向 json.dumps 和 json.dump 方法传递额外的缩进和 sort_keys 参数。

import json
person_string = '{"name": "Bob", "languages": "English", "numbers": [2, 1.6, null]}'
# Getting dictionary
person_dict = json.loads(person_string)
# Pretty Printing JSON string back
print(json.dumps(person_dict, indent = 4, sort_keys=True))

运行程序后,输出结果将是

{
    "languages": "English",
    "name": "Bob",
    "numbers": [
        2,
        1.6,
        null
    ]
}

在上述程序中,我们使用了四个空格作为缩进,键值按升序排序。

顺便说一下,缩进的默认值是 "无",而 sort_keys 的默认值是 "假"。 

If this seems a little over your head, we have a fantastic and easy-to-understand Introduction to Web Scraping. If it’s rotating residential proxies you’re looking for to ensure a smooth data collection operation, contact our team for details or explore our inclusive monthly packages.

常见问题

谁创建了 JSON?

Douglas Crockford 于 1999 年创建了它,作为 XML 的替代品。

什么是语法树?

语法树直观地显示语言结构。它将语言分解成句子的各个部分,通常忽略上下文。

如何用 Python 读取本地 JSON 文件?

首先,导入 json 模块,然后使用 open() 函数以 json 文件名打开文件。然后,使用 load() 读取 json 文件,并将 json 数据放入变量中。

在本文中:
告别复杂的网络搜索。
选择 IPBurger 先进的网络智能解决方案,轻松收集实时公共数据。
注册

更深入地了解

代理
AJ Tait
可靠性、速度和透明度最佳的 HydraProxy 替代方案

为什么越来越多的用户在寻找 HydraProxy 替代品 乍一看,HydraProxy 似乎是一个不错的选择。它价格实惠,提供旋转和静态的住宅代理服务器,并通过 "即用即付 "的定价方式为用户提供灵活性。对于普通用户来说?这就足够了。但对于数据刮擦人员、运动鞋抄袭者、搜索引擎优化专家和自动化用户来说,他们需要

代理
AJ Tait
道德、可扩展和高性能代理的最佳 Rayobyte 替代方案

为什么越来越多的用户在寻找Rayobyte的替代品 Rayobyte作为一个受人尊敬的代理服务器供应商,为需要大量IP的企业和个人提供数据中心、ISP和住宅代理服务器。凭借极具竞争力的价格和多种代理类型,它已成为许多网络用户的首选。

利用全球最先进的
代理扩展您的业务
加入屡获殊荣的第一代理网络