Python对json数据的提取
JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。XML也是一种数据交换格式,为什么没有选择XML呢?因为XML虽然可以作为跨平台的数据交换格式,但是在JS(JavaScript的简写)中处理XML非常不方便,同时XML标记比数据多,增加了交换产生的流量,而JSON没有附加的任何标记,在JS中可作为对象处理,所以我们更倾向于选择JSON来交换数据。
1,为什么要研究json数据的提取呢?
是因为zabbix监控取数据的时候,很多都是要处理json中的某个指标数据的。例如我要从一大串的json数据中,取某个指标数据,怎么取呢?下面举个例子:
json数据:{‘TotalCount’: 1, ‘InstanceSet’: [{‘Placement’: {‘Zone’: ‘ap-guangzhou-4’, ‘ProjectId’: 0, ‘HostIds’: None, ‘HostIps’: None, ‘HostId’: None}, ‘InstanceId’: ‘ins-6h6p3k6e’, 'InstanceTy
pe’: ‘S5.SMALL2’, ‘CPU’: 1, ‘Memory’: 2, ‘RestrictState’: ‘NORMAL’, ‘InstanceName’: ‘未命名’, ‘InstanceChargeType’: ‘PREPAID’, ‘SystemDisk’: {‘DiskType’: ‘CLOUD_PREMIUM’, ‘DiskId’: 'd
isk-h5o7wnf0’, ‘DiskSize’: 50}, ‘DataDisks’: None, ‘PrivateIpAddresses’: [‘172.16.0.12’], ‘PublicIpAddresses’: [‘134.175.228.48’], ‘InternetAccessible’: {‘InternetChargeType’: 'BANDWI
DTH_PREPAID’, ‘InternetMaxBandwidthOut’: 1, ‘PublicIpAssigned’: None, ‘BandwidthPackageId’: None}, ‘VirtualPrivateCloud’: {‘VpcId’: ‘vpc-mk4mrt4b’, ‘SubnetId’: ‘subnet-py2q6cqc’, 'AsV
pcGateway’: False, ‘PrivateIpAddresses’: None, ‘Ipv6AddressCount’: None}, ‘ImageId’: ‘img-oikl1tzv’, ‘RenewFlag’: ‘NOTIFY_AND_MANUAL_RENEW’, ‘CreatedTime’: ‘2020-12-25T08:55:24Z’, 'Ex
-
piredTime’: ‘2021-01-25T08:55:24Z’, ‘OsName’: ‘CentOS 7.5 64位’, ‘SecurityGroupIds’: [‘sg-r8l8s8ef’], ‘LoginSettings’: {‘Password’: None, ‘KeyIds’: [‘skey-oa700dq3’], ‘KeepImageLogin’
- None}, ‘InstanceState’: ‘RUNNING’, ‘Tags’: [], ‘StopChargingMode’: ‘NOT_APPLICABLE’, ‘Uuid’: ‘c1c29e0f-388a-429e-af28-35d836495e38’, ‘LatestOperation’: ‘ResetInstancesPassword’, 'La
testOperationState’: ‘SUCCESS’, ‘LatestOperationRequestId’: ‘bc0bafe1-0c8f-4be5-9ddf-8933f4f3d8ed’, ‘DisasterRecoverGroupId’: ‘’, ‘IPv6Addresses’: None, ‘CamRoleName’: ‘’, 'HpcCluster
Id’: ‘’, ‘RdmaIpAddresses’: None}], ‘RequestId’: ‘9a97237b-a614-4ef9-9f50-18190911c120’}
我要从里面抽取出InstanceId 这个指标的值,这里推荐用一个在线的json数据处理网站:https://www.sojson.com/simple_json.html,这个网站方便我们分析json数据的结构的。
看图吧:
2,取某个数据,用json.loads
json.loads 用于解码 JSON 数据,json.loads()函数是将json格式数据转换为字典(可以这么理解,json.loads()函数是将字符串转化为字典),res就是上面那串json数据了。观察json数据结构,InstanceId包含在元数组InstanceSet里面,然后json.load(res)将数据转化为字典,选取InstanceSet元数组里面的数据,之后直接选取InstanceId对象,就可以得出该对象的数值了。如下图:
打印结果:
其它的原理不细说了,自己百度python json比我说的好,然后自己尝试获取其它的数据就知道怎么用了。我就用它实现了一些功能。如下图,想要什么值就可以打印出它的值。
技术交流欢迎加入Q群:177428068
更多推荐
所有评论(0)