使用Python解析JSON_Parsing JSON with Python

网络技术 专栏收录该内容
8 篇文章 0 订阅

来源:https://developer.cisco.com/learning/modules/fundamentals/parsing-json-python/step/1

  • 了解如何将JSON文本解析为原生Python数据,以及如何处理数据。
  • 学习目标:
    • 结构化数据格式
    • 用Python读写文件
    • JSON是轻量级的语法
    • 如何用Python的JSON模块加载load和dump转储数据
    • 访问签到数据中的数据元素

以文本格式存储和共享数据

  • 结构化文本的好处:
    • 人类可读
    • 易于移动
    • 可解析(APP可以解析文本以提取结构化数据)
  • 常用标准化数据交换格式
    • JSON:JavaScript对象表示法(JavaScript Object Notation)
    • XML:可扩展标记语言(eXtensible Markup Language)
    • YAML:不是一种标记语言(YAML Ain’t Markup Language)

读取和写入文件

file = open("intro-python/parsing-json/pep20.txt", mode="r")
file_contents = file.read()
print(file_contents)

# 关闭文件
file.close()

不记得关闭,用with声明。

>>> with open("intro-python/parsing-json/pep20.txt", mode="r") as file:
...     file_contents = file.read()
...     print(file_contents)
  • 写入文件:与读取过程相同。我们打开文件,只是这次用“写入”模式打开它,使用该open(file, mode='w')功能。使用file.write()函数将我们的内容写入文件。

解析JSON

  • 使用Python的json模块。
#!/usr/bin/env python
"""Parsing structured JSON text into native Python data structures...

...and how to access and work with nested data.
"""


import json
import os
from pprint import pprint


# 获取脚本文件的路径,保存到here。
here = os.path.abspath(os.path.dirname(__file__))


# Read in the JSON text
with open(os.path.join(here, "interface-config.json")) as file:
    json_text = file.read()


# Display the type and contents of the json_text variable
print("json_text is a", type(json_text))
print(json_text)


# Use the json module to parse the JSON string into native Python data
json_data = json.loads(json_text)


# Display the type and contents of the json_data variable
print("json_data is a", type(json_data))
pprint(json_data)

使用嵌套数据

什么是嵌套数据

在这里插入图片描述

 {
    "ietf-interfaces:interface": {
        "name": "GigabitEthernet2",
        "description": "Wide Area Network",
        "enabled": true,
        "ietf-ip:ipv4": {
            "address": [
                {
                    "ip": "172.16.0.2",
                    "netmask": "255.255.255.0"
                }
            ]
        }
    }
}

索引嵌套数据

  • 使用[]
>>> pprint(json_data["ietf-interfaces:interface"])
{'description': 'Wide Area Network',
 'enabled': True,
 'ietf-ip:ipv4': {'address': [{'ip': '172.16.0.2',
                               'netmask': '255.255.255.0'}]},
 'name': 'GigabitEthernet2'}
  • 获得ip address这个接口:
>>> json_data["ietf-interfaces:interface"]["ietf-ip:ipv4"]["address"][0]["ip"]
'172.16.0.2'

循环嵌套数据

for interface in json_data["ietf-interfaces:interfaces"]["interface"]:
    print(interface["name"])

实例:

#!/usr/bin/env python
"""Working with nested data hands-on exercise / coding challenge."""


import json
import os


# Get the absolute path for the directory where this file is located "here"
here = os.path.abspath(os.path.dirname(__file__))


with open(os.path.join(here, "interfaces.json")) as file:
    # TODO: Parse the contents of the JSON file into a variable
    json_data=json.loads(file.read())
    
# TODO: Loop through the interfaces in the JSON data and print out each
# interface's name, ip, and netmask.
for interface in json_data["ietf-interfaces:interfaces"]["interface"]:
    print("{name}:{ip} {netmask}".format(name=interface["name"],
                                         ip=interface["ietf-ip:ipv4"]["address"][0]["ip"],
                                         netmask=interface["ietf-ip:ipv4"]["address"][0]["netmask"]
                                         ))
  • 输出:
GigabitEthernet1:198.18.134.11 255.255.192.0
GigabitEthernet2:172.16.255.1 255.255.255.0
Loopback0:10.0.0.1 255.255.255.255
  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值