写了好几篇文章了,今天写点很少人写但是很有用的!记得点赞保藏加重视哦。

前语:Json数据介绍

Json是一个运用及其广泛的用来传输和沟通数据的格局,它被运用在数据库中,也被用于API恳数据库体系概论第五版课后答案求作用数据集中。尽管它运用广泛,机器很简单阅览且节约空间,但是却不利于人来阅览和进一步做数据分析,因此通常情况下需求在获取json数据后,将其转HTTPS化为表格格局的数据,以便利人来阅览和理解。常见的Json数据格局有2种,均以键值对的形式存储数据,只是包装数据的办法有所数据库差异:

a. 一般JSON政策

选用{}将键值对数据括起来,有时候会有多层{json接口回来过错}

你有必要知道的Pandas 解析json数据的函数-json_normalize()

b. JSON政策列表

选用[]JSON政策括起来,构成一个JSON政策的列表,JSON政策中同样会有多层{},也会有[]呈现,构成嵌套https域名列表

你有必要知道的Pandas 解析json数据的函数-json_normalize()

这篇文章首要叙说pandas内置的Json数据转化办法http 404json_normalize(),它能够对以上两种Json格局的数据进行解析,毕竟生成DataFrame,从而对数据进行更多操作。本文的首要解构如下:

  1. 解析一个最基本的Json
  2. 解析一个带有多层数据的Json
  3. 解析一个带有嵌套列表的Json
  4. Key不存在时怎样疏忽体系报错嵌套查询和嵌套成果的差异
  5. 运用sep参数为嵌套json字符串Json的Key设置http://192.168.1.1登录分隔http署理json格局
  6. 为嵌套列表数据和元数据增加前缀
  7. 经过URL获取Json数据并进json行解析
  8. 根究:解析带有多个嵌套列表的JsJSONon

json_normalize()函数参数阐明

参数名 阐明
data 未解析的Json政策,也能够是Json列表政策
record_patjson是什么意思h 列表或字HTTP符串,假定Json政策中的嵌套列表未在此设置,则完结解析后会直接将其整个列表存储到一列中展示
meta Json政策中的,存在多层数据时也能够进行嵌套符号
meta_prefix 键的前缀
record_prefix 嵌套列表的前缀
errors 过失信息,可设置为ignore,标明假定key不存在则疏忽http协议过失,也可设置为raise,标明假定key不存在则报错进行提示。默认值为raise
sep 多层key之间的分隔符json,默认值是.(一个数据库有哪几种点)
max_level 解析Json政策的最大层级数,适用于有多层嵌套的数据库体系概论第五版课后答案Json方嵌套查询sql句子

在进行代码演示前先导入相应依嵌套查询和嵌套成果的差异靠库,未设备pandas库的请自行设备(此代码在Jupyter Notebook环境中作业)。

from pandas import json_normalize
import pand数据库体系的中心是as as pd

1. 解析一个最基本的Jshttps域名on

a. 解https和http的差异析一般Json政策

a_dict = {
'school': 'ABC primary school',
'location': 'London',
'ranking': 2
}
pd.json_nojson是什么意思rmalize(a_dihttps认证ct)

输出作用为:

你有必要知道的Pandas 解析json数据的函数-json_normalize()

b. 解析一个Json政策列表

json_list = [
{'cl嵌套查询ass': 'Year 1', 'student number': 20, 'room': 'Yellojson文件是干什么的w'},
{'class': 'Year 2', 'stud数据库规划ent number': 25, 'room': 'Blue'}
]
pd.json_normalize(json_list)

输出作用为:

你有必要知道的Pandas 解析json数据的函数-json_normalize()

2. 解析一个带有多层数据的Json

a. 解析一个有多层数据的Json政策

json_obj = {
'schoolhttp://www.baidu.com': 'ABC primary school',
'location': 'London',
'ranking':https域名 2,
'info': {
'president': 'John Kasich',
'contacts':http://www.baidu.com {
'email': {
'ahttp协议dmission': 'admission@abc.com'https和http的差异,
'general': 'infojson@abc.com'
},
'tel': '123456789',
}
}
}
pd.json_normalize(json_obj)

输出作用为:
你有必要知道的Pandas 解析json数据的函数-json_normalize()

多层key之间运用点隔开,展示了悉数的数据,这现已解析了3层,上述写法和pd.json_normalize(json_obj, max_levelhttp署理=3)等价。

假定https和http的差异设置majsonx_level=1,则输出作用为下https协议图所示,contacts嵌套是什么意思分的数据调集成了一列数据库体系的特色
你有必要知道的Pandas 解析json数据的函数-json_normalize()

假定设置max_level=2,则输出作用为下图所示,contacts 下的email嵌套if函数部分的数据调集成了一列
你有必要知道的Pandas 解析json数据的函数-json_normalize()

b. 解析一个有多层数据的Json政策列表

jsohttps协议n_list = [
{
'class': 'Year 1',
'student count': 20,
'room': 'Yellow',
'info': {
'teachers': {
'math':https认证 'Rick Scott',
'physics': 'Elon Mask'
}
}
},
{
'class': 'YearHTTP 2',
'student count': 25,
'room': 'Blue',
'info': {
'teachers': {
'math': 'Alan Turing',
'physics': 'Albehttp署理rt Einstein'
}
}
}
]
pd.json_normalize(json_list)

输出作用为:

你有必要知道的Pandas 解析json数据的函数-json_normalize()

若别离将max_level设置为23,则输出作用应别离是什么?请自行检验~

3. 解析一个带有嵌套列表的Json

json_obj =https安全问题 {
'school': 'json字符串ABC primary sch嵌套if函数ool',
'location': 'London',
'ranking': 2,
'info': {
'president': 'John Kasich',
'contacts': {
'email': {
'adm数据库体系概论第五版课后答案ission': 'admissijson文件是干什么的on@abc.com',
'general': 'in嵌套循环fo@HTTPSabc.com'
},
'tel': '123456789',
}
},
'students': [
{'name': 'Tom'},
{'name': 'James'数据库体系概论第五版课后答案},
{'name': 'Jacqujson接口回来过错eline'}
],
}
pd.jsonjson数据_normalize(jshttp://www.baidu.comon_obj)

此例中studentshttp 404对应的值是一个列表,运用[]括起来。直接选用上述的办法进行解析,则得到的作用如下:

你有必要知道的Pandas 解析json数据的函数-json_normalize()

students部分的数据并未被成功https协议解析,此刻可认为record_path设置值即可,调用办法为p嵌套函数d.json_normalize(json_obj, record_p数据库软件ath='students'),在此调用办法下,得到的作用只包含了name部分的数据。

你有必要知道的Pandas 解析json数据的函数-json_normalize()

若要增加其他字段的信息,则需为meta参数赋值,https认证例如下述调用办法下,得到的作用如下:

pd.json_normalize(json_obj, record_path='students', meta=['school', 'location', ['info', 'contacts', 'tel'], ['in数据库查询句子fo', 'contacts', 'email', 'general']])

你有必要知道的Pandas 解析json数据的函数-json_normalize()

4. 当Key不存在时怎样疏忽体系报错

data = [
{
'class': 'Year数据库软件 1',
'student count': 20,
'room': 'Yellow',
'json字符串info': {
'teachers': {
'math': 'Rick Scott',
'physics': 'Elon Mask',
}
},
'students': [
{ 'name': 'Thttp 500om', 'sex': 'M' },
{ 'name': 'James', 'sex': 'M' },
]
},
{
'class': 'Year 2',
'student count': 25,
'room': 'Blu嵌套规划e',
'info': {
'teac嵌套规划hers': {
# no math teacher
'physics': 'Albehttps和http的差异rt Einstein'
}
},
'students': [
{ 'namejson格局怎样翻开': 'Tony', 'sex': 'M' },
{ 'name': 'Jacqueline', 'sex': 'F' },json接口回来过错
]
},
]
pd.json_normalize(
data,
record_path =['students'],
meta=['class', 'room', ['info', 'teachers', 'math']]
)

class等于Year 2的Json政策中,teachers下的math键不存在,直接作业上述代码会报以下过失,提示math键并不总是存在数据库体系概论第五版课后答案,且给出了相应主张:Try running with errors='ignore'

你有必要知道的Pandas 解析json数据的函数-json_normalize()

增加errors条件后,从头作业得出的作用如下图所示,没有mathhttp协议的部分运用NaN进行了添数据库原理补。

pd.json_normalize(
data,
record_path =['students'],
meta=['class', 'room'https安全问题, ['info',嵌套 't数据库查询句子eachers', 'math']],
errors='ignore'
)

你有必要知道的Pandas 解析json数据的函数-json_normalize()

5. 运用sep参数为嵌套数据库查询句子Json的Key设置分隔符

2.a的案例中,能够注意到输出作用的具有多层key的数据列标题是选用.对多层khttps认证ey进行分隔的,可认为sep赋值以更改分json数据隔符。

json_obj = {
'school': 'ABC primary school',
'loca数据库tion': 'London',
'ranking': 2,
'info': {
'president': 'John Kajson数据sich',
'contacts': {
'email': {
'admission': 'admission@abc.com',
'general': 'JSONinfo@abc.com'
},
'tel': '123456789',
}
}
}
pd.jsonjson解析_normalize(json_obj, sep='->')

输出作用为:

你有必要知道的Pandas 解析json数据的函数-json_normalize()

6. 为嵌套列表数据和元数据增加前缀

3例的输出作用中,各列名均无前缀,例如name这一列不知是元数据解析得到的数据,还是经过student嵌套列表的的出的数据,因此为record_prefixmeta_prefix参数别离赋值,即可为输出作用增加相应http 302前缀。

json_obj = {
'school': 'ABC pri数据库软件mary school',
'location': 'London',
'ranking': 2,
'info': {
'president': 'John Kasich',
'conthttps安全问题acts': {
'email': {
'admission': 'admission@abc.com',
'general': 'info@abc.com'
},
'tel': '123456789',
}
},
'studentsjson': [
{'name'嵌套是什么意思: 'Tom'},
{'name': 'James'},
{'name': 'Jacqueline'}
],
}
pd.json_norjson字符串malize(json_obj, record_path='studen嵌套结构ts',
meta=['school', 'location', ['info', 'contacts', 'tel'], ['info', 'contacts', 'email', 'general']],
recohttps域名rd_prefhttps和http的差异ix='students->',
meta_prefix='meta->',
shttps协议ep='->')

本例中,为嵌套列表数据增加students->前缀,为元数据增加meta->前缀,将嵌套key之间的分隔符修改为->,输出作用为:

你有必要知道的Pandas 解析json数据的函数-json_normalize()

7. 经过URL获取Json数据并进行解析

经过URL获取数据需求用到requests库,请自行设备相应库。

import requests
from pandas import json_normalize
# 经过气候API,获取深圳近7天的气候
url = 'https://tianhttpwatchqiapi.com/free/week'
# 传入url,并设定好相应的params
r = requests.get(url, params={http 500"appid"json字符串:"59257444", "appsecret":"uULlTGV9 ", 'city':'深圳'})
# 将获取到的值转化为jsohttps认证n政策
re数据库办理体系sult =JSON r.json()
df =https安全问题 json_normalize(result, meta=['city',嵌套序列 'cityid', 'update_tim数据库软件e'], record_path=['data'])
df

resul嵌套查询和嵌套成果的差异t的作用如下所示,其间data为一个嵌套列表:

{'cityid': '101280601http 500',
'chttp 500ity': '深圳',
'update_time': '2021-08-09 06:39:49',
'dat数据库体系概论第五版课后答案a': [{'date': '2021-08-09',
'https和http的差异wea': '中雨转雷阵雨',
'wea_img':数据库办理体系 'yu',
'tem_da嵌套规划y': '32',
'tem_night': '26',
'win': '无继续风向',
'win_speed': '<3https和http的差异级'},
{'datejson': '2021-08-10',数据库查询句子
'wea': '雷数据库体系的特色阵雨',
'wea_img': 'yu',
'tem_嵌套序列day': '32',
'tem_ni嵌套查询ght': '27',
'win': '无继续风向',
'win_speed': '<3级'},
{'date': '2021-08-11',
'wea': '雷阵雨'嵌套查询和嵌套成果的差异,
'wea_img': 'yu',
'tem_day': '31',
'tem_night': '27',
'数据库查询句子win': '无持https认证续风向',
'win_spjsoneed': '<3级'},
{'date': '2021-08-12',
'wea': '多云',
'wea_img': 'yun',
'tjson格局怎样翻开em_day': '33',
'tem_night': '27',
'http://192.168.1.1登录win': '无继续风向',
'win_speed': '<3级'},
{'date': '2021-08-13',
'wea': '多云',
'wea_img': 'yun',
'temhttps和http的差异_day': '33',
'tem_night': '27',
'http 500win': '无继续风向',
'win_speed': '&ltjson文件是干什么的;3级'},
{'date': '2021-08-14',
'wea': '多云',
'wea_img': 'yun',
'tem_day': '32',
'tem_night': '27',
'win': '无继续风向',
'win_speed': '<3级'},
{'date': '2021-08-15',
'wea': '多云',
'wea_imhttpwatchg': 'yun',
'tem_day': '32',
'tem_数据库办理体系night': '27',
'数据库体系的特色win': '无继续风向',
'win_speed': '<3级'}]}

解析后的输出作用为:

你有必要知道的Pandas 解析json数据的函数-json_normalize()

8. 根究:解析带有多个嵌套列表的Json

当一个Json政策或政策列表中有逾越一个嵌套列表时,record_path无法将悉数的嵌套列表包含进去,由于它只能接收一个key值。此刻,我们需求先依据多个嵌套列表的key将Json解析成多个DataFrame,再将这些DataF数据库查询句子rame依据实际相关条件拼接起来,并去除重复值。

json_obj = {
'school': 'ABC primary school',
'location': 'shenzhen',
'ranking': 2,
'info': {
'president': 'John Kasich',
'contacts': {
'email': {
'admission': 'admission@abc.com',
'general': 'info@abc.com'
},
'tel': '1234数据库体系概论第五版课后答案56789',
}
},
'students': [
{'namehttps协议': 'Tom'},
{'name': 'James'}数据库体系的中心是,
{'name': 'Jacquelihttps和http的差异ne'}
],
# 增加university嵌套列表数据库体系的中心是,加上students,该JSON政策中就有2个嵌套列表了
'university': [
{'university_name': 'HongKong university shenzhen'},
{'u嵌套函数niversity_name': 'zhongs数据库规划han university shenzhen'},
{'university_name': 'shejson格局怎样翻开nzhen university'}
],
}
# 检验在record_pa数据库体系概论第五版课后答案th中写上两个嵌套列表的姓名,即record_path = ['students', 'univjson接口回来过错ersity],作用无济于事
# 所以抉择分两次进行解析,别离将record_path设嵌套查询置成为university和students,毕竟将2个作用吞并起来
d数据库办理体系f1 = pdJSON.json_normalize(json_obj, record_path=['university'],
meta=['schojson字符串ol', 'location', ['info', 'contacts', 'tel'],
['info', 'cohttp 302ntacts', 'email', 'generaljson']],
record_prefix='university->',
meta_prefix='meta->',
sep='->')
df2 = pd.j数据库son_normalize(json_obj, record_path=['students'],
meta=['数据库软件school', 'location', ['info', 'contacts', 'tel'],
['info', 'contacts', 'email', 'general']],
record_prefix='students->',
meta_prefix='meta->',
sep='->')
# 将两个作用依据index相关起来并去除重复列
df1.merge(df2, how='left', left_index=True, right_index=True, suffixes=['->', '->']).T.djsonprop_duplicates().T

输出作用为:

你有必要知道的Pandas 解析json数据的函数-json_normalize()

途中红框标出来的部分为Json政策中所对应的两个嵌套列表。

总结

j嵌套查询和嵌套成果的差异son_normalize()办法反httpwatch常健壮,简直涵盖了悉数解析JSON的场景,涉及到一些更凌嵌套乱场景时,能够给予已有的功用进行发散整合,例如8. 根究中遇到的问题相同。

具有了这个健壮的Json解析库,以后再也不怕遇到杂乱的Json数据了!

UP辛苦拾掇,还不快快点赞保藏加重视!