1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

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

Python:如何使用Python提取JSON数据指定内容?

Python作为一种比较常见的编程语言,其应用的范围还是比较的广泛的。主要讲解的内容是如何使用Python提取JSON数据指定内容,需要我们好好的去进行一个实操。那么,怎么样快速的才能够上手这项技能呢?下面小编给大家详细解答下。

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

如何提取JSON数据指定内容

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

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

1、JSON数据为字符串类型

import json
string_data = "{'err_no':0,'err_str':'OK','pic_id':'1169213517976400008','pic_str':'xoet','md5':'ca9bc4fda521498d2b3aba5dbb4ee4ac'}"
json_data = string_data.replace(""", "'")
json_dict = json.loads(json_data)
print(json_dict['pic_str'])

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'])

如何提取复杂JSON的数据

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

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

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

解决方法

直接使用这段代码即可:

def extract_element_from_json(obj,path):
    def extract(obj,path,ind,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)
        elif 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"])

完整代码如下:

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

应用场景

通过这样的方式可以在以下场景下使用:

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

这篇文章就介绍到这里了,希望可以给大家带来帮助。

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/7218.html