嵌套 JSON 之后居然变成了它?

从 Python 中的 json 对象中获取所有键和值 在本Python教程中,我们将了解如何获取此 json 对象中的所有键以及键的所有值。 好吧,让我开始吧,让我 在这里拿一个空的python文件,所以是的,所以让我先把这个文件保存为example.py。 加载 json 因为它是一个 json 我需要导入这个名为json的包。这使您可以使用json。然后它在这个特定的 Python 文件中可用。 <span style="color:var(--syntax-text-color)"><span style="col... 阅读详情

调用API和文档数据库会返回嵌套的JSON对象,当我们使用Python尝试将嵌套结构中的键转换为列时,数据加载到pandas中往往会得到如下结果:

df = pd.DataFrame.from_records(results [“ issues”],columns = [“ key”,“ fields”])

在这里插入图片描述

说明:这里results是一个大的字典,issues是results其中的一个键,issues的值为一个嵌套JSON对象字典的列表,后面会看到JSON嵌套结构。

问题在于API返回了嵌套的JSON结构,而我们关心的键在对象中确处于不同级别。

嵌套的JSON结构张成这样的。

在这里插入图片描述

而我们想要的是下面这样的。

在这里插入图片描述

下面以一个API返回的数据为例,API通常包含有关字段的元数据。假设下面这些是我们想要的字段。

key:JSON密钥,在第一级的位置。

summary:第二级的“字段”对象。

status name:第三级位置。

statusCategory name:位于第4个嵌套级别。

如上,我们选择要提取的字段在issues列表内的JSON结构中分别处于4个不同的嵌套级别,一环扣一环。

{
  "expand": "schema,names",
  "issues": [
    {
      "fields": {
        "issuetype": {
          "avatarId": 10300,
          "description": "",
          "id": "10005",
          "name": "New Feature",
          "subtask": False
        },
        "status": {
          "description": "A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.",
          "id": "5",
          "name": "Resolved",
          "statusCategory": {
            "colorName": "green",
            "id": 3,
            "key": "done",
            "name": "Done",
          }
        },
        "summary": "Recovered data collection Defraglar $MFT problem"
      },
      "id": "11861",
      "key": "CAE-160",
    },
    {
      "fields": { 
... more issues],
  "maxResults": 5,
  "startAt": 0,
  "total": 160
}

一个不太好的解决方案

一种选择是直接撸码,写一个查找特定字段的函数,但问题是必须对每个嵌套字段调用此函数,然后再调用.apply到DataFrame中的新列。

为获取我们想要的几个字段,首先我们提取fields键内的对象至列:

df = (
    df["fields"]
    .apply(pd.Series)
    .merge(df, left_index=True, right_index = True)
)

在这里插入图片描述

从上表看出,只有summary是可用的issuetype、status等仍然埋在嵌套对象中。

下面是提取issuetype中的name的一种方法。

# 提取issue type的name到一个新列叫"issue_type"
df_issue_type = (
    df["issuetype"]
    .apply(pd.Series)
    .rename(columns={"name": "issue_type_name"})["issue_type_name"]
)
df = df.assign(issue_type_name = df_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"]
df = pd.json_normalize(results["issues"])
df[FIELDS]

在这里插入图片描述

没错,就这么简单。

码字不易废话两句:有需要python学习资料的或者有技术问题交流 “点击”即可

其它操作

录路径

除了像上面那样传递results["issues"]列表之外,我们还使用record_path参数在JSON对象中指定列表的路径。

# 使用路径而不是直接用results["issues"]
pd.json_normalize(results, record_path="issues")[FIELDS]

定义分隔符

还可以使用sep参数自定义嵌套结构连接的分隔符,比如下面将默认的“.”替换“-”。

# 用 "-" 替换默认的 "."
FIELDS = ["key", "fields-summary", "fields-issuetype-name", "fields-status-name", "fields-status-statusCategory-name"]
pd.json_normalize(results["issues"], sep = "-")[FIELDS]

控制递归

如果不想递归到每个子对象,可以使用max_level参数控制深度。在这种情况下,由于statusCategory.name字段位于JSON对象的第4级,因此不会包含在结果DataFrame中。

# 只深入到嵌套第二级
pd.json_normalize(results, record_path="issues", max_level = 2)

以上就是小编今天为大家带来的内容,小编本身就是一名python开发工程师,我自己花了三天时间整理了一套python学习教程,从最基础的python脚本到web开发,爬虫,数据分析,数据可视化,机器学习,等,这些资料有想要的小伙伴 " 点击 " 即可领取

接口测试之json中的key获取 !我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。欢迎大家点击下方名片免费领取,千万不要错过哦。 阅读详情

相关推荐

java解析多层嵌套json字符串

/** * JSON实际上也是键值对("key":"value") * key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null) * value如果是字符串,用jsonobj.getString("key")获取 * value如果是数 字,用jsonobj.getIntValue("ke...

qq_40510017的博客 2316

JSON对象中获取指定key的值

平时处理Json对象时,想获取JSON对象中获取指定key的值,如下图,想直接取到"result"、"status"的值。 { "code":0, "message":"ok", "body":{ "result":"success", "status":"1" } } 下面以get类型http请求示例详细说明: import com.alibaba.fastjson.JSONObject; import...

junior77的专栏 1万+

JSON之多嵌套数据_添加JSON_解析JSON_方法实现

最近在获取外部数据时,对方给的是多嵌套JSON串,工作忙完后,无聊自己去创建了一个多嵌套json并解析实现做了一个简单demo 1、多嵌套json添加 2、解析JSON 代码示例: package com.lamdba.suren.JSON; import net.sf.json.JSONObject; /** * JSON 数据:{"ting":"1111","bitch":{"Layman":{"orgCodeData":"111","period":"2222","invoiceC

爱犬酋酋 2264

jquery获取json对象中的key小技巧,遍历json串所有key,value

比如有一个json var json = {"name" : "Tom", "age" : 18}; 想分别获取它的key 和 value for (var key in json) { console.log(key); //获取key值 console.log(json[key]); //获取对应的value值 } 还要一种方法用jquery回调函数完成的 $...

weixin_33976072的博客 3858

手把手教你用AirSim和Unreal4在Ubuntu上创建自定义无人机仿真场景

本指南详细介绍了如何在Ubuntu系统上使用AirSim和Unreal Engine 4搭建高精度无人机仿真环境。从硬件配置、驱动安装到Unreal Engine编译和AirSim集成,手把手教你创建自定义场景,适用于算法验证和开发测试。

y7z8a的博客 255

Ansys Zemax与Speos协同设计:从HUD光学优化到驾驶环境可视化全流程解析

本文深入解析了如何利用Ansys Zemax与Speos进行协同设计,实现从HUD光学系统核心优化到驾驶环境可视化验证的全流程。文章强调了HUD设计是光学性能与视觉感知的深度耦合,通过Zemax进行精密光学设计,再利用Speos进行系统级仿真与感知模拟,最终完成从虚拟到现实的闭环验证,有效提升HUD产品的开发效率与可靠性。

weixin_29199873的博客 240

java获取json对象中的值和key_用 Python 操作 JSON 类型数据详解

JSON简介JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的...

weixin_39535287的博客 4713

[ESP32S3N16R8][LVGL8.3.0][IDF5.2.3]ST7701S RGB屏幕驱动[vscode最详细配置]

ST7701S ESP32S3 基于ESP-IDF5.2.3编写,编程环境为vscode。本教程详细讲述了esp32s3配置st7701s屏幕驱动以及gt911触摸驱动并关联到lvgl8.3.0,使用IDF5.23示例rgb_panel进行测试删除了其里面的屏幕驱动,改为单独编写屏幕和触摸驱动,最后完成了实列。

qq_44022379的博客 2604

php解析嵌套json_嵌套 JSON 然后变成了Dataframe?

调用API和文档数据库会返回嵌套的JSON对象,当我们使用Python尝试将嵌套结构中的键转换为列时,数据加载到pandas中往往会得到如下结果:df = pd.DataFrame.from_records(results [“ issues”],columns = [“ key”,“ fields”])说明:这里results是一个大的字典,issues是results其中的一个键,issues...

weixin_39758618的博客 155

基于STM32设计的遥控小车(手机APP+GPS+温湿度+ESP8266)

一、环境介绍 小车主控MCU: STM32F103ZET6 STM32程序开发IDE: keil5 STM32程序风格: 采用寄存器方式开发,注释齐全,执行效率高,方便移植 手机APP: 采用QT设计,程序支持跨平台编译运行(Android、IOS、Windows、Linux都可以编译运行,对应平台上QT的环境搭建,之前博客已经发了文章讲解) 硬件包含: 淘宝购买的完整一套4轮遥控小车(采用STM32F103ZET6作为主控板)、DHT11温湿度传感器、中科微GPS模块、ESP8266 ...

6万+

MVDR算法: 自适应波束形成在信号处理领域中扮演着重要的角色。本文将介绍MVDR(最小方差无失真响应)算法,并提供相应的Matlab源代码实现。

MVDR算法是一种用于抑制干扰信号并增强感兴趣信号的自适应波束形成算法。它的基本思想是通过对干扰信号进行空间滤波,使其在感兴趣信号方向上的输出功率最小化。这种方法可以提高信号的质量和可辨识度,特别是在存在多个干扰源的复杂环境中。本文将介绍MVDR(最小方差无失真响应)算法,并提供相应的Matlab源代码实现。使用MVDR算法,我们可以通过对观测信号进行波束形成来抑制干扰信号并增强感兴趣信号。以上是MVDR算法的Matlab实现。的每一列代表一个阵列元素的观测信号。表示期望的波束指向,即感兴趣信号的方向。

HackWhisper的博客 1244

Agent的“嵌套JSON”噩梦:当Action Input变成字符串套娃

在调用Agent工具时明明传了date参数,却反复报错Field required。排查发现,LangChain的ReAct Agent在生成Action Input时,将整个JSON对象作为字符串嵌套进了line_name字段,导致Pydantic只解析到第一个字段。本文剖析Agent参数生成的内部机制,并提供“防御性JSON解析”的通用解决方案。适用于LangChain 0.3.x版本的Agent工具开发。

20多年IT老兵|制造业数据架构与AI落地|全流程亲手实践|源码同步开源 456

TriCore架构-基于TC397的启动流程

TC397芯片的启动流程分为三个关键阶段:固件启动(BootFirmware)、Bootloader引导和应用程序启动。BootFirmware作为硬件信任根,包含SSW基础初始化、CHSW自检和BSL应急刷写通道。Bootloader承担安全验证和程序引导功能,支持双分区(AB-SWAP)和双引导方案(PBL/SBL)。安全启动通过校验机制确保软件完整性,提供三种可选技术方案。应用程序启动阶段实现软件双分区管理,支持SOTA更新。整个流程体现了汽车电子系统的安全设计理念,通过硬件级保护与软件验证相结合确保

xiandang8023的博客 987

【JS】转换多个json结构的字符串为数组

js 转换多个json结构的字符串为数组

qq_45677671的博客 1763

备考路上的学习笔记:我的软考高级架构师复盘与更新计划

本专栏基于作者备考软考高级系统架构设计师的真实经验,分为考前突击、基础夯实、核心突破、案例实战和论文通关五大模块。内容涵盖计算机体系结构、操作系统、数据库等核心知识,提供案例解析和论文范文。作者承诺持续更新考纲内容、真题复盘及互动答疑,旨在帮助考生系统备考,将个人踩坑经验转化为实用指南,陪伴考生共同完成从知识碎片到体系构建的蜕变历程。

qq837993702的博客 2293

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

odps SQL解析json对象的一些问题

例如一个json就是一个界面,有多个shop;一个shop有多个product;每个product都有一个title。我们该如何获取所有shop的所有product的title呢?这就需要探讨第二个问题了。后面可以再用lateral view展开。但上述代码返回的是一个数组型的。odps同样也提供了一个函数。通过上述代码可以将返回的。

qq_40772429的博客 4662

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Java Xml转换成Json, 对象

现在有以下的xml文件, 内容如下: <iso_10303_28_terse xmlns="urn:oid:1.0.10303.238.1.0.1" xmlns:exp="urn:oid:1.0.10303.28.2.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" schema="integrated_cnc_schema"> <exp:header>

长河的博客 1669

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

嵌套java对象转换单层json_将嵌套的java对象转换为Jackson JSON

有人可以提供一个示例或引用,它提供了一种方法,可以使用Jackson库将嵌套JAVA对象转换为JSON输出.我没有转换平面JAVA对象的问题.但是,JSON库显示嵌套对象名称和类型而不是其子对象.我几乎利用了http://www.mkyong.com/java/jackson-2-convert-java-object-to-from-json/提供的相同代码.所以我没有附上任何代码示例.例如//...

weixin_31951319的博客 860

JS 将json数组转为嵌套层级数组

eleUI的树级菜单的数据要求是这种嵌套的,但是Ztree的老用发的是 var zNodes =[ { id:1, pId:0, name:"zTree Home", pid:0}, { id:2, pId:0, name:"zTree in Google",pid:0},       { id:3, pId:0, name:"zT...

weixin_30667301的博客 1862

java json转抽象对象_做一次面向对象的体操:将 JSON 字符串转换为嵌套对象的一种方法...

原标题:做一次面向对象的体操:将 JSON 字符串转换为嵌套对象的一种方法来源:琴水玉 ,www.cnblogs.com/lovesqcc/p/9478678.html程序员共读整理发布,转载请联系作者获得授权背景与问题在 《一个略复杂的数据映射聚合例子及代码重构》 一文中,将一个JSON字符串转成了所需要的订单信息Map。尽管做了代码重构和配置化,过程式的代码仍然显得晦涩难懂,并且客户端使用Ma...

weixin_29189373的博客 257

用递归将嵌套的JSON对象遍历出来,转为二维数组

用递归将嵌套的JSON对象遍历出来,转为二维数组

hddfuuh的博客 632

在 Qt 中构建和解析多层嵌套的 JSON 数据

一. 如何解析多层嵌套的 JSON 数据当从服务器获取复杂的 JSON 数据时,可能会遇到多层嵌套的结构。"age": 21,},这种 JSON 数据包含一个student对象,而student对象内部又嵌套了一个address对象。为了解析这样的 JSON 数据,我们需要递归地提取每一层的对象和字段。解析多层 JSON 的代码示例// 模拟一个多层的 JSON 响应"age": 21,},})";// 解析 JSON 文档// 获取 'student' 对象。

weixin_73414031的博客 3287

Java中Json字符串直接转换为对象(包括多层List集合 嵌套)

http://blog.youkuaiyun.com/catoop/article/details/42744705 使用到的类:net.sf.json.JSONObject 使用JSON时,除了要导入JSON网站上面下载的json-lib-2.2-jdk15.jar包之外,还必须有其它几个依赖包:commons-beanutils.jar,commons-httpclient.jar,commons...

C30混凝土 1万+

rapidjson解析嵌套json和生成嵌套json

首先准备我们要的头文件 rapidjson/document.h" rapidjson/writer.h" rapidjson/stringbuffer.h" using namespace rapidjson; 现在我们解析一个这样的嵌套json: { "code": 0, "count": 1, "data": [ { ...

ZHYFXY的博客 4921

解析json嵌套问题

解析json嵌套问题 package jansonDemo; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; p...

飞天小鱼 2155
上一篇: 代码写的太乱?一分钟教你优化
下一篇: 不会吧,不会还有人解决不了数据倾斜吧
python程序员小'鹏
博客等级 码龄6年 163粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值