如何⽤Python解析JSON数据
使⽤Python读取和解析JSON数据教程
JSON格式是⽹站和API使⽤的通⽤标准格式,现在主流的⼀些数据库(如PostgreSQL)都⽀持JSON格式。在本⽂中,我们将介绍如何使⽤Python处理JSON数据。⾸先,让我们先来看看JSON的定义。
什么是JSON?
JSON或JavaScript Object Notation,是⼀种使⽤⽂本存储数据对象的格式。换句话说,它是⼀种数据结构,将对象⽤⽂本形式表⽰出来。尽管它来源⾃JavaScript,但它已成为传输对象的实际标准。
⼤多数流⾏的编程语⾔都⽀持JSON格式,包括Python。JSON格式的⽂件经常⽤于API传输数据对象。以下是JSON字符串的⽰例:
{
"name": "United States",
"population": 331002651,
"capital": "Washington D.C.",
"languages": [
"English",
"Spanish"
]
}
在这个例⼦中,JSON数据看起来像⼀个Python字典。像字典⼀样,JSON以键值对的形式传递数据。然⽽,JSON数据也可以是字符串、数字、布尔值或列表。
在JSON流⾏之前,XML⼀直是以⽂本格式表⽰数据对象的常见选择。以下是XML格式的相同信息的⽰例:
<?xml version="1.0" encoding="UTF-8"?>
<country>
<name>United States</name>
<population>331002651</population>
<capital>Washington D.C.</capital>
<languages>
<language>English</language>
<language>Spanish</language>
crontab计算器</languages>
</country>
很明显,JSON代码量更少。这是JSON如此流⾏的主要原因之⼀。如果您想了解有关JSON标准的更多信息,请访问。
Python中的JSON
Python原⽣⽀持JSON数据。Python json模块是标准库的⼀部分。该json模块可以将JSON数据从JSON格式转换到等效的Python对象,例如dictionary和list。JSON模块还可以将Python对象转换为JSON格式。
Python的json模块提供编写⾃定义编码器和解码器功能,⽆需单独安装。您可以在⾥到Pythonjson模块的官⽅⽂档。
接下来,我们将研究下这个模块。我们将把JSON转换为dictionary和list。我们还将尝试处理⾃定义类。
将JSON字符串转换为Python对象
JSON数据经常存储在字符串中。这是使⽤API时的常见场景。JSON数据在解析之前⼀般存储在字符串变量中。因此,与JSON相关的最常见任务是将JSON字符串解析为Python字典。JSON模块可以轻松处理此任务。
第⼀步是导⼊Python的json模块。该模块包含两个重要的功能-loads和load。
请注意,第⼀种⽅法看起来像复数形式,但事实并⾮如此。字母“S”代表“字符串”。
loads是将字符串解析为JSON数据。请注意,它读作“load-s”。这⾥的“s”代表“字符串”。Load的使⽤场景是当数据以字节为单位时。这部分后⾯会详细介绍。
让我们从⼀个简单的例⼦开始。JSON数据实例如下:
{
"name": "United States",
"population": 331002651,
}
JSON数据可以在解析之前存储为JSON字符串。我们不仅可以使⽤Python的三引号来存储多⾏字符串,也可以通过删除换⾏符来提⾼可读性。
# JSON string
country = '{"name": "United States", "population": 331002651}'
print(type(country))
此代码段的输出将确认这确实是⼀个JSON字符串:
<class 'str'>
我们可以调⽤该json.loads()并将此字符串作为参数。
import json
country = '{"name": "United States", "population": 331002651}'
country_dict = json.loads(country)
print(type(country))
print(type(country_dict))
此代码段的输出将确认作为字符串的JSON数据现在已经是Python字典。
<class 'str'>
<class 'dict'>
这本字典可以像往常⼀样正常访问:
print(country_dict['name'])
# OUTPUT: United States
需要注意的是,json.loads()⽅法并不总是返回字典。返回的数据类型将取决于输⼊的字符串。例如,下⾯这个JSON字符串将返回⼀个列表,⽽不是⼀个字典。
countries = '["United States", "Canada"]'
counties_list= json.loads(countries)
print(type(counties_list))
# OUTPUT:
同样,如果JSON字符串包含true,它将被转换为Python等效的布尔值,即True。
import json
bool_string = 'true'
bool_type = json.loads(bool_string)
print(bool_type)
# OUTPUT:  True
下表显⽰了转换后的JSON对象和Python数据类型。
JSON Python
object dict
array list
string str
number (integer)int
电子发票导出是xml格式的number (real)float
true True
false False
null None
接下来我们将继续下⼀个主题,将JSON对象解析为Python对象。
将JSON⽂件转换为Python对象
读取JSON⽂件,并将JSON数据解析为Python数据,与我们解析存储在字符串中JSON数据的⽅式⾮常相似。除了JSON,我们还需要Python的原⽣函数open()。
⼀般loads⽤于读取JSON字符串,⽽load()⽤于读取⽂件中的JSON数据。
load()⽅法接收⼀个⽂件对象并返回解析为Python对象的JSON数据。
要从⽂件路径中获取⽂件对象,可以使⽤Python的函数open()。
将以下JSON数据另存为新⽂件并将其命名为united_states.json:
{
"name": "United States",
"population": 331002651,
"capital": "Washington D.C.",
"languages": [
生成表查询sql语句"English",
"Spanish"
]
}
在新⽂件中输⼊此Python脚本:
import json
with open('united_states.json') as f:
data = json.load(f)
print(type(data))
运⾏此Python⽂件会输出以下内容:
<class 'dict'>
在此⽰例中,该open函数返回⼀个⽂件句柄,该句柄会提供给load。
变量data包含JSON,作为Python字典。这意味着可以按如下⽅式检查字典键:
print(data.keys())
# OUTPUT:  dict_keys(['name', 'population', 'capital', 'languages'])
使⽤此信息,name可以输出如下:
data['name']
# OUTPUT: United States
在前两节中,我们研究了如何将JSON转换为Python对象。现在,我们来看看如何将Python对象转换为JSON对象。
将Python对象转换为JSON字符串
将Python对象转换为JSON对象也称为序列化或JSON编码。可以使⽤函数dumps()来实现。它被读作dump-s,字母S代表字符串。
以下是⼀个简单的例⼦。将此代码作为Python脚本保存在新⽂件中:
import json
languages = ["English","French"]
country = {
"name": "Canada",
"population": 37742154,python请求并解析json数据
"languages": languages,
"president": None,
}
country_string = json.dumps(country)
print(country_string)
使⽤Python运⾏此⽂件时,将输出以下结果:
{"name": "Canada", "population": 37742154, "languages": ["English", "French"],
"president": null}
Python对象现在就是⼀个JSON对象了。这个简单的例⼦展⽰了将Python对象解析为JSON对象的过程,
整个过程并不复杂。⽽此处的Python对象是⼀个字典。这就是它被转换为JSON对象类型的原因。同样,列表也可以转换为JSON。这是对应的Python脚本及其输出:
import json
languages = ["English", "French"]
languages_string = json.dumps(languages)
print(languages_string)
git是干什么的# OUTPUT:  ["English", "French"]
它不仅限于字典和列表。string,int,float,bool甚⾄None值都可以转换为JSON。
有关详细信息,请参阅下⾯的转换表。可以看到,只有字典被转换为json对象类型。有关官⽅⽂档,请参阅。
Python JSON
dict object
list,tuple array
str string
int,float,int number哪里有学编程
True true
False false
None null
将Python对象写⼊JSON⽂件
⽤于编写JSON⽂件的⽅法是dump().这种⽅法与dumps()⽅法⾮常相似。唯⼀的区别是dumps()返回⼀个字符串,dump()写⼊⼀个⽂件。
下⾯是⼀个简单的演⽰,将以编辑模式打开⽂件并将数据写成JSON格式。保存此Python脚本并运⾏它。
import json
# Tuple is encoded to JSON array.
languages = ("English", "French")
# Dictionary is encoded to JSON object.
country = {
"name": "Canada",
"population": 37742154,
"languages": languages,
"president": None,
}
with open('countries_exported.json', 'w') as f:
json.dump(country, f)
使⽤Python执⾏此代码时,countries_exported.json会创建(或覆盖)⽂件,内容为以上JSON⽂件。
但是,您会发现整个JSON都在⼀⾏中。为了使它更具可读性,我们可以再传递⼀个参数给dump()函数,如下所⽰:
json.dump(country, f, indent=4)
这⼀次,当您运⾏代码时,格式就正常了,同时还会缩进4个空格:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。