python json序列化对象,Python json操作
Python教程栏目介绍如何嵌套JSON
推荐(免费):Python教程
调用API和文档数据库将返回嵌套的JSON对象。当我们使用Python尝试将嵌套结构中的键转换为列时,在将数据加载到pandas中时,我们通常会得到以下结果:
df=PD . data frame . from _ records(results[" issues "],columns=[" key "," fields "])说明:这里results是一个大字典,issues是results的键之一,issues的值是嵌套的JSON对象字典的列表。稍后您将看到JSON嵌套结构。问题是API返回了一个嵌套的JSON结构,但是我们关心的键在对象中处于不同的层次。
嵌套的JSON结构就变成这样了。
而我们想要的是下面的。
以下面API返回的数据为例。API通常包含关于字段的元数据。让我们假设这些是我们想要的字段。
Key:JSON key,在第一层。摘要:第二层的“字段”对象。状态:第三级位置。status目录名:在第四嵌套层。如上所述,我们选择提取的字段位于问题列表中JSON结构的四个不同嵌套级别,一个接一个。
{
展开 : 架构,名称,
问题 : [
{
字段 : {
问题类型 : {
avatarId: 10300,
描述 : ,
id: 10005 ,
名称 : 新功能,
子任务:为假
},
状态 : {
描述 : 已做出决议,正在等待记者核实。从这里开始,问题要么被重新打开,要么被关闭。
id: 5 :
名称 : 已解决:
状态目录 : {
颜色名称 : 绿色,
id: 3,
钥匙 : 完成:
名称 : 完成:
}
},
摘要 : 已恢复数据收集碎片整理$MFT问题
},
id: 11861 ,
钥匙 : CAE-160 :
},
{
字段 : {
.更多问题】,
maxResults: 5,
从: 0开始,
总计: 160
}一个不太好的解决方案
一种选择是直接编码写一个函数来寻找一个特定的字段,但问题是你必须为每个嵌套的字段调用这个函数,然后调用。应用于数据框架中的新列。
要获得我们想要的几个字段,首先我们提取字段中的对象,这些字段是列的键:
s="brush:php;toolbar:false">df = (
df["fields"]
.apply(pd.Series)
.merge(df, left_index=True, right_index = True)
)从上表看出,只有summary是可用的,issuetype、status等仍然埋在嵌套对象中。
下面是提取issuetype中的name的一种方法。
# 提取issue type的name到一个新列叫"issue_type"
像上面这样,如果嵌套层级特别多,就需要自己手撸一个递归来实现了,因为每层嵌套都需要调用一个像上面解析并添加到新列的方法。
对于编程基础薄弱的朋友,手撸一个其实还挺麻烦的,尤其是对于数据分析师,着急想用数据的时候,希望可以快速拿到结构化的数据进行分析。
下面东哥分享一个pandas
的内置解决方案。
内置的解决方案
pandas
中有一个牛逼的内置功能叫 .json_normalize
。
pandas
的文档中提到:将半结构化JSON
数据规范化为平面表。
前面方案的所有代码,用这个内置功能仅需要3行就可搞定。步骤很简单,懂了下面几个用法即可。
确定我们要想的字段,使用 . 符号连接嵌套对象。
将想要处理的嵌套列表(这里是results["issues"]
)作为参数放进 .json_normalize
中。
过滤我们定义的FIELDS列表。
FIELDS = ["key", "fields.summary", "fields.issuetype.name", "fields.status.name", "fields.status.statusCategory.name"]
没错,就这么简单。
其它操作
记录路径
除了像上面那样传递results["issues"]
列表之外,我们还使用record_path
参数在JSON
对象中指定列表的路径。
# 使用路径而不是直接用results["issues"]
自定义分隔符
还可以使用sep参数自定义嵌套结构连接的分隔符,比如下面将默认的“.”替换“-”。
### 用 "-" 替换默认的 "."
控制递归
如果不想递归到每个子对象,可以使用max_level
参数控制深度。在这种情况下,由于statusCategory.name
字段位于JSON
对象的第4级,因此不会包含在结果DataFrame
中。
# 只深入到嵌套第二级
下面是.json_normalize
的pandas
官方文档说明,如有不明白可自行学习,本次东哥就介绍到这里。
pandas官方文档:https://pandas.pydata.org/pan...
以上就是Python介绍嵌套 JSON 秒变 Dataframe!的详细内容,更多请关注盛行IT软件开发工作室其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。