使用python如何提取JSON数据指定内容

目录
  • python提取JSON数据指定内容
    • 假设我们要获取'pic_str'里的数据
    • 1、JSON数据为字符串类型
    • 2、JSON数据为字典类型
  • python提取复杂JSON的数据
    • 例子
    • 解决方法
    • api 提取元素
    • 应用场景

python提取JSON数据指定内容

假设我们要获取'pic_str'里的数据

JSON数据

{'err_no': 0, 'err_str': 'OK', 'pic_id': '1169213517976400008', 'pic_str': 'xoet', 'md5': 'ca9bc4fda521498d2b3aba5dbb4ee4ac'}

1、JSON数据为字符串类型

import json
 
str = "{'err_no': 0, 'err_str': 'OK', 'pic_id': '1169213517976400008', 'pic_str': 'xoet', 'md5': 'ca9bc4fda521498d2b3aba5dbb4ee4ac'}"
json_str = str.replace("'",'"')
# json.loads() ,要求json串格式中必须的双引号!!转换为字典
json_dict = json.loads(dict2)
print(json_dict['pic_str'])
>> xoet

2、JSON数据为字典类型

import json
 
json_dict = {'err_no': 0,'err_str': 'OK', 'pic_id': '1169213517976400008', 'pic_str': 'xoet', 'md5': 'ca9bc4fda521498d2b3aba5dbb4ee4ac'}
# 方法一
print(json_dict['pic_str'])
# 或者使用 print(json_dict.get('pic_str'))
 
# 方法二:遍历
for pic in json_dict['pic_str'}:
    print(pic)

python提取复杂JSON的数据

在越来越多的项目中,基本都用了 json 作为接口数据返回的格式。json 给我们的感觉就是通俗易懂,只是即使再复杂的结构也会比其他格式容易看。然而一旦在调试或者测试中需要用到提取某一部分字段数据进行解析并校验的话,就没那么容易了。这篇文章使用 python 简单地获取到复杂 json 数据中的字段信息。

例子

如果有一个接口返回的 json 信息如下:

{
  "familyName": "thinker family",
  "homeTown": "广东省",
  "formed": 2016,
  "secretBase": "Super city",
  "active": true,
  "familyMembers": [
    {
      "name": "Jobs",
      "age": 35,
      "secretIdentity": "1992238132345",
      "powers": [
        "Radiation resistance",
        "Turning tiny",
        "Radiation blast"
      ]
    },
    {
      "name": "James",
      "age": 37,
      "secretIdentity": "8839394098124",
      "powers": [
        "Million tonne punch",
        "Damage resistance",
        "Superhuman reflexes"
      ]
    }
  ]
}

这里就包含了对象,以及列表数据。对象中也包含列表数据。这应该是最基本的企业接口 json 格式了。

假如你要提取 json 中的 name 信息,最简单的方式就是

member = [ members.get('name') for members in data.get('familyMembers') ]

如果是要连续拿其他的信息,那么就需要换其他中获取方式,其实这种是比较麻烦的一种方法。

解决方法

extract_element_from_json(data, ["familyMembers", "name"])
>> ['Jobs', 'James']

此函数根据 path 中指定的键嵌套到obj中的记录中以检索所需的信息。当遇到一个列表作为 path 中键的值时,此函数会拆分并以深度优先的方式继续嵌套在遇到的列表的每个元素上。这就是返回 ['Jobs', 'James'] 的方式;因为 familyMembers 的值是一个列表,所以嵌套在它的两个元素上被拆分,并且 name 的每个值都附加到输出列表中。

如果 obj 是单个字典/ json,则此函数返回包含所需信息的列表,如果 obj 是字典/ json 列表,则此函数返回包含所需信息的双重列表。

如果嵌套字典/ json 的相应级别缺少 path 的元素,则此函数返回 [None]。

完整代码如下:

def extract_element_from_json(obj, path):
    '''
    输入关键字,就可以将关键字的值信息存放在列表中并输出
    如果关键字是对象名,则返回的对象字典信息到列表中
    如果关键字是列表名,则返回的列表信息到列表中(返回双重列表)
    '''
    def extract(obj, path, ind, arr):
    	'''
    	从一个嵌套的字典中提取一个元素,并返回到列表中。
        params: obj - dict - 输入字典
        params: path - list - 构成JSON路径的字符串列表
        params: ind - int - 起始索引
        params: arr - 列表 - 输出列表
    	'''
        key = path[ind]
        if ind + 1 < len(path):
            if isinstance(obj, dict):
                if key in obj.keys():
                    extract(obj.get(key), path, ind + 1, arr)
                else:
                    arr.append(None)
            elif isinstance(obj, list):
                if not obj:
                    arr.append(None)
                else:
                    for item in obj:
                        extract(item, path, ind, arr)
            else:
                arr.append(None)
        if ind + 1 == len(path):
            if isinstance(obj, list):
                if not obj:
                    arr.append(None)
                else:
                    for item in obj:
                        arr.append(item.get(key, None))
            elif isinstance(obj, dict):
                arr.append(obj.get(key, None))
            else:
                arr.append(None)
        return arr
    if isinstance(obj, dict):
        return extract(obj, path, 0, [])
    elif isinstance(obj, list):
        outer_arr = []
        for item in obj:
            outer_arr.append(extract(item, path, 0, []))
        return outer_arr

这段代码可以直接复制使用。

其中使用方法很简单如下:

extract_element_from_json(data, ["familyMembers", "name"])

api 提取元素

import requests
url = "http://ip-api.com/json"
response = requests.request("GET", url)
data = response.json()
extract_element_from_json(data, ["status"])

就是这么简单地使用了。

应用场景

通过这样的方式可以在什么场景下使用呢?

  • 接口重构,需要校验接口中的部分字段数据
  • 接口新增字段,只针对新增的字段进行提取校验
  • 需要提取某一部分字段进行数据传递

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • python实现提取str字符串/json中多级目录下的某个值

    字符串多级目录取值: 比如说: 你response接收到的数据是这样的. 你现在只需要取到itemstring 这个字段下的值.其他的都不要! 思路就是:字符串是个json格式(或转为json格式),然后str转为字典dict,然后循环遍历按照key来取值. 你的data是个字典 然后item_list是data的Key ,item_list是个数组,这个里面的数组中的每个元素都是一个字典. 因此就是dict多级路径按key取值. # 多级目录提取-dict print(type(respons

  • Python JSON格式数据的提取和保存的实现

    环境:python-3.6.5 JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于进行数据交互的场景,比如网站前台与后台之间的数据交互. Python中自带了json模块,直接import json即可使用 官方文档:https://docs.python.org/3/library/json.html Json在线解析网站:https://www.json.cn/# j

  • 如何基于python操作json文件获取内容

    这篇文章主要介绍了如何基于python操作json文件获取内容,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 写case时,将case 写到json文件比写到,写python一定要学会处理json 以下,是要处理的json 处理操作包括:打开json文件,获取json文件内容,关闭json文件,读取内容中的对应key的value { "name": "BeJson", "url": "

  • 使用python如何提取JSON数据指定内容

    目录 python提取JSON数据指定内容 假设我们要获取'pic_str'里的数据 1.JSON数据为字符串类型 2.JSON数据为字典类型 python提取复杂JSON的数据 例子 解决方法 api 提取元素 应用场景 python提取JSON数据指定内容 假设我们要获取'pic_str'里的数据 JSON数据 {'err_no': 0, 'err_str': 'OK', 'pic_id': '1169213517976400008', 'pic_str': 'xoet', 'md5': '

  • Python如何提取csv数据并筛选指定条件数据详解

    目录 前言 一.使用pandas和numpy库 二.使用步骤 1.引入库 2.读入数据 3.转化格式 4.处理数据 总结 前言 本文主要介绍通过Python提取csv文件中数据,并对数据进行处理. 编译器:Anaconda3 语言:Python3 一.使用pandas和numpy库 通过pandas库可以从csv提取到数据,但是数据的格式是DateFrame 格式,因为我不懂怎么处理DateFrame 格式的数据,所以就使用numpy库,将提取的数据转化为数组格式,这样可以就可以通过对数组的处理

  • Python 格式化打印json数据方法(展开状态)

    目的:Python 格式化打印json数据方法(展开状态) 环境: 系统:Win10 x64 环境: Pycharm Python 3.7.0 问题分析: Python下json手法的json在打印查看时,括号和数据都没有展开,查看起来比较困难. 解决方案: 使用json.dumps的separators设置,将数据展开格式化打印. 解决步骤: data = json.dumps(data, sort_keys=True, indent=4, separators=(', ', ': ')) 例

  • 使用Python爬取Json数据的示例代码

    一年一度的双十一即将来临,临时接到了一个任务:统计某品牌数据银行中自己品牌分别在2017和2018的10月20日至10月31日之间不同时间段的AIPL("认知"(Aware)."兴趣"(Interest)."购买"(Purchase)."忠诚"(Loyalty))流转率. 使用Fiddler获取到目标地址为: https://databank.yushanfang.com/api/ecapi?path=/databank/cr

  • Python对象与json数据的转换问题实例详解

    目录 JSON 函数 使用 JSON 函数需要导入 json 库:import json. json.dumps 语法 实例 实例 实例 json.loads 语法 实例 实例 使用第三方库:Demjson 环境配置 JSON 函数 encode 语法 实例 实例 decode 语法 实例 实例 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写. JSON 函数 使用 JSON 函数需要导入 json 库:import json. 函

  • Python实现替换文件中指定内容的方法

    本文实例讲述了Python实现替换文件中指定内容的方法.分享给大家供大家参考,具体如下: 这里使用python编写的程序,实现如下功能:将文件中的指定子串 修改为 另外的子串 编写的python程序,文件名是file_replace.py,具体代码如下: #!/usr/bin/env python #_*_ coding:utf-8 _*_ import sys,os if len(sys.argv)<4 or len(sys.argv)>5: sys.exit('There needs fo

  • python如何读写json数据

    本文实例为大家分享了python读写json数据的具体代码,供大家参考,具体内容如下 案例: 在web应用中常常用到json数据进行传输数据,本质上是字典类型数据转换成字符串,通过字符串进行网页传输,然后把接收到的字符串转换成字典类似数据 需求:实现字典转换成字符串,字符串转换成字典数据类型,写入文件 如何做? 1.明确dumps和dump的区别,dump的接口是文件,直接写入文件,dumps把对应的数据类型转换成字符串,loads 和dumps相反,load直接从文件中读取文件并把数据转换成对

  • python flask解析json数据不完整的解决方法

    当使用Python的flask框架来开发网站后台,解析前端Post来的数据,通常都会使用request.form来获取前端传过来的数据,但是如果传过来的数据比较复杂,其中右array,而且array的元素不是单个的数字或者字符串的时候,就会出现解析不到数据的情况,比如使用下面的js代码向python flask传递数据 $.ajax({ "url":"/test", "method":"post", "data&qu

  • Python全面解析json数据并保存为csv文件

    目录 解析json数据并保存为csv文件 完整代码 将json任意行文件转为csv文件并保存 将json格式的前3000条数据存入csv 解析json数据并保存为csv文件 首先导入两个包: import json import pandas as pd 打开json 文件并读取: with open('2.json', encoding='utf-8') as f:     line = f.readline()     d = json.loads(line)     f.close() 读

  • Python如何使用qrcode生成指定内容的二维码并在GUI界面显示

    目录 前言 1.下载所需的模块 2.生成指定内容的二维码 3.加载二维码到GUI窗口上显示 4.全部代码展示 5.运行结果展示 总结 前言 现如今我们生活在一个二维码的时代,生活中处处都是二维码,支付要使用二维码,微信加好友要使用二维码,乘坐公共交通要使用二维码,那么,如果要你使用python语言生成指定内容的二维码,你该怎么做呢?下面我就来带你走进qrcode的世界吧! 1.下载所需的模块 qrcode是二维码生成的Python开源库,而kinter模块(“Tk 接口”)是Python的标准T

随机推荐