首页技术为王RPA影刀高级-JSON

影刀高级-JSON

分类RPA时间2026-08-10 20:09:38发布信义之树浏览114
导读:一、JSON简介 1. import json.py 都集中到一块了。有一些细节需注意。加s和不加s的区别,import json data_json =''...

一、JSON简介

    1. import json.py

         都集中到一块了。有一些细节需注意。加s和不加s的区别,

import json

data_json ='''{
"城市":"杭州",
"温度":28.5,
"天气":"晴朗",
"预报":["多云","晴朗","雷阵雨"],
"湿度":60,
"风":{"方向":"东南","速度":10.5},
"空气质量":null,
"是否节假日":true
}'''

data_python ={
"城市":"杭州",
"温度":28.5,
"天气":"晴朗",
"预报":["多云","晴朗","雷阵雨"],
"湿度":60,
"风":{"方向":"东南","速度":10.5},
"空气质量":None,
"是否节假日":True
}


data_python =json.loads(data_json)
print(data_python,type(data_python),sep="\n")

data_python =json.load(open("data_json.json", encoding='utf-8'))
print(data_python,type(data_python),sep="\n")


data_jsonP=json.dumps(data_python,ensure_ascii=False)
print(data_jsonP,type(data_jsonP),sep='\n')


data_jsonW=json.dump(data_python,open("data_jsonW.json","w",encoding="utf-8"),ensure_ascii=False,indent=4)


运行结果:

{'城市': '杭州', '温度': 28.5, '天气': '晴朗', '预报': ['多云', '晴朗', '雷阵雨'], '湿度': 60, '风': {'方向': '东南', '速度': 10.5}, '空气质量': None, '是否节假日': True}
<class 'dict'>
{'城市': '杭州', '温度': 28.5, '天气': '晴朗', '预报': ['多云', '晴朗', '雷阵雨'], '湿度': 60, '风': {'方向': '东南', '速度': 10.5}, '空气质量': None, '是否节假日': True}
<class 'dict'>
{"城市": "杭州", "温度": 28.5, "天气": "晴朗", "预报": ["多云", "晴朗", "雷阵雨"], "湿度": 60, "风": {"方向": "东南", "速度": 10.5}, "空气质量": null, "是否节假日": true}
<class 'str'>



        https://www.xinyizhishu.top/yingdaoC/import json.py


    2.data_json.json

{
    "城市":"杭州",
    "温度":28.5,
    "天气":"晴朗",
    "预报":["多云","晴朗","雷阵雨"],
    "湿度":60,
    "风":{"方向":"东南","速度":10.5},
    "空气质量":null,
    "是否节假日":true
}


        https://www.xinyizhishu.top/yingdaoC/data_json.json


3. data_jsonW.json

{
    "城市": "杭州",
    "温度": 28.5,
    "天气": "晴朗",
    "预报": [
        "多云",
        "晴朗",
        "雷阵雨"
    ],
    "湿度": 60,
    "风": {
        "方向": "东南",
        "速度": 10.5
    },
    "空气质量": null,
    "是否节假日": true
}



        https://www.xinyizhishu.top/yingdaoC/data_jsonW.json


二、JSONPath

    1.json基础操作

import json

data_json ='''{
"城市":"杭州",
"温度":28.5,
"天气":"晴朗",
"预报":["多云","晴朗","雷阵雨"],
"湿度":60,
"风":{"方向":"东南","速度":10.5},
"空气质量":null,
"是否节假日":true
}'''

data_python=json.loads(data_json)
print(data_python['预报'][1])


        https://www.xinyizhishu.top/yingdaoC/JSONPath.py


    2.区划代码提取示例

        先用千问生成一小部分数据:

{
  "code": 1,
  "msg": "数据返回成功!",
  "data": [
    {
      "name": "中国",
      "code": "1",
      "clist": [
        {
          "code": "110000",
          "name": "北京市",
          "pchilds": [
            { "code": "110101", "name": "东城区" },
            { "code": "110102", "name": "西城区" },
            { "code": "110105", "name": "朝阳区" },
            { "code": "110106", "name": "丰台区" },
            { "code": "110107", "name": "石景山区" }
          ]
        },
        {
          "code": "120000",
          "name": "天津市",
          "pchilds": [
            { "code": "120101", "name": "和平区" },
            { "code": "120102", "name": "河东区" },
            { "code": "120103", "name": "河西区" },
            { "code": "120104", "name": "南开区" },
            { "code": "120105", "name": "河北区" }
          ]
        },
        {
          "code": "130000",
          "name": "河北省",
          "pchilds": [
            {
              "code": "130100",
              "name": "石家庄市",
              "cchilds": [
                { "code": "130102", "name": "长安区" },
                { "code": "130104", "name": "桥西区" },
                { "code": "130105", "name": "新华区" }
              ]
            },
            {
              "code": "130200",
              "name": "唐山市",
              "cchilds": [
                { "code": "130202", "name": "路南区" },
                { "code": "130203", "name": "路北区" }
              ]
            },
            {
              "code": "130600",
              "name": "保定市",
              "cchilds": [
                { "code": "130602", "name": "竞秀区" },
                { "code": "130606", "name": "满城区" }
              ]
            }
          ]
        },
        {
          "code": "140000",
          "name": "山西省",
          "pchilds": [
            {
              "code": "140100",
              "name": "太原市",
              "cchilds": [
                { "code": "140105", "name": "小店区" },
                { "code": "140106", "name": "迎泽区" },
                { "code": "140107", "name": "杏花岭区" }
              ]
            },
            {
              "code": "140200",
              "name": "大同市",
              "cchilds": [
                { "code": "140212", "name": "新荣区" },
                { "code": "140213", "name": "平城区" }
              ]
            }
          ]
        },
        {
          "code": "150000",
          "name": "内蒙古自治区",
          "pchilds": [
            {
              "code": "150100",
              "name": "呼和浩特市",
              "cchilds": [
                { "code": "150102", "name": "新城区" },
                { "code": "150103", "name": "回民区" },
                { "code": "150104", "name": "玉泉区" }
              ]
            },
            {
              "code": "150200",
              "name": "包头市",
              "cchilds": [
                { "code": "150202", "name": "东河区" },
                { "code": "150203", "name": "昆都仑区" }
              ]
            }
          ]
        }
      ]
    }
  ]
}


        一点一点筛选:

局部截取_20260812_160855.png

        模糊筛选:

局部截取_20260812_160944.png


    3. 实例

        实例json数据:

{
  "code": 200,
  "data": {
    "state": "0",
    "info": [
      {
        "time": "2019-09-27",
        "city": "那曲市",
        "content": "[那曲市]到达【那曲邮政处理中心】"
      },
      {
        "time": "2019-09-27",
        "city": "拉萨市",
        "content": "[拉萨市]离开【拉萨邮区中心局邮件处理中心】"
      },
      {
        "time": "2019-09-26",
        "city": "拉萨市",
        "content": "[拉萨市]到达【航空邮件处理中心】(经转)"
      },
      {
        "time": "2019-09-25",
        "city": "北京市",
        "content": "[北京市]离开【北京航站】"
      }
    ]
  },
  "Author": {
    "name": "Alone88",
    "desc": "由Alone88提供的免费API 服务,官方文档:www.alapi.cn"
  }
}


        提取data节点:

局部截取_20260812_161338.png

        info节点:

局部截取_20260812_161453.png


        提取content得用2个点:

局部截取_20260812_161637.png


        或者加*号:

局部截取_20260812_161747.png


        提取其中一个:

局部截取_20260812_161835.png

        用,隔开表示取其中几个:

局部截取_20260812_164050.png

        冒号不包括后面的:

局部截取_20260812_164512.png

        加上中括号效果一样:

局部截取_20260812_164628.png

        还可以把.去掉:

局部截取_20260812_164716.png


        @.length,加括号:

局部截取_20260812_165434.png

        高级表达式:

局部截取_20260812_165743.png

        与或非:

局部截取_20260812_165836.png

    4.在python中运用:

        安装库:

pip install jsonpath


        代码:

from jsonpath import jsonpath

data_json2 ='''{
  "code": 200,
  "data": {
    "state": "0",
    "info": [
      {
        "time": "2019-09-27",
        "city": "那曲市",
        "content": "[那曲市]到达【那曲邮政处理中心】"
      },
      {
        "time": "2019-09-27",
        "city": "拉萨市",
        "content": "[拉萨市]离开【拉萨邮区中心局邮件处理中心】"
      },
      {
        "time": "2019-09-26",
        "city": "拉萨市",
        "content": "[拉萨市]到达【航空邮件处理中心】(经转)"
      },
      {
        "time": "2019-09-25",
        "city": "北京市",
        "content": "[北京市]离开【北京航站】"
      }
    ]
  },
  "Author": {
    "name": "Alone88",
    "desc": "由Alone88提供的免费API 服务,官方文档:www.alapi.cn"
  }

}'''

data_python2=json.loads(data_json2)
result=jsonpath(data_python2,"$..content")
print(result)


        文件写到一块了:

        https://www.xinyizhishu.top/yingdaoC/JSONPath.py


三、JSON案例

    1. 请求地址

        https://www.mxnzp.com/doc/detail?id=8

        https://www.mxnzp.com/api/address/v2/list?app_id=不再提供请自主申请&app_secret=不再提供请自主申请

        id需登录获取。


    2.先提取两列:

        影刀自带:

局部截取_20260812_184158.png

        导入代码块:

局部截取_20260812_184247.png

        

        代码块:

from jsonpath import jsonpath
name=jsonpath(json_instance,'$.data[0].clist[*].pchilds[*].cchilds[*].name')
code=jsonpath(json_instance,'$.data[0].clist[*].pchilds[*].cchilds[*].code')

        写入数据表格:

局部截取_20260812_184434.png





    2.提取省市:

        jsonpath不适用。

局部截取_20260812_185132.png

        数据表格:

局部截取_20260812_185149.png





    3.用pandas

局部截取_20260812_190559.png



        pandas代码:

import pandas as pd

dataframe = pd.json_normalize(
    json_instance['data'][0], 
    ['clist', 'pchilds', 'cchilds'], 
    [['clist', 'name'], ['clist', 'pchilds', 'name']]
)

cchilds_list = dataframe.reindex(columns=['clist.name', 'clist.pchilds.name', 'name', 'code']).values.tolist()











影刀高级-数据库入门 影刀高级-CSS

游客 回复需填写必要信息
↑