感谢点赞和关注 ,每天进步一点点!加油!
目录
Python 系列文章学习记录:
Python系列之Windows环境安装配置_开着拖拉机回家的博客-CSDN博客
Python系列之变量和运算符_开着拖拉机回家的博客-CSDN博客
Python系列之判断和循环_开着拖拉机回家的博客-CSDN博客
Python系列之字符串和列表_开着拖拉机回家的博客-CSDN博客
Python系列之文件操作和函数_开着拖拉机回家的博客-CSDN博客
Python系列模块之标准库OS详解_开着拖拉机回家的博客-CSDN博客
Python系列模块之标准库re详解_开着拖拉机回家的博客-CSDN博客
Python系列模块之标准库json详解_开着拖拉机回家的博客-CSDN博客
Python系列模块之标准库shutil详解_开着拖拉机回家的博客-CSDN博客
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它使得人们很容易的进行阅读和编写,同时也方便了机器进行解析和生成。它是基于JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999 的一个子集。JSON采用完全独立于程序语言的文本格式,但是也使用了类C语言的习惯(包括C,C++, C#, Java, JavaScript, Perl, Python等),这些特性使JSON成为理想的数据交换语言。
JSON基于两种结构:
这些都是常见的数据结构。目前,绝大部分编程语言都以某种形式支持它们。这使得在各种编程语言之间交换同样格式的数据成为可能。
JSON具有以下这些形式:
对象(object) 是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
- {
- "HDFSProject":[
- {
- "projectName":"traffic_site",
- "hdfsSrcPath":"hdfs:///tmp/flume",
- "alarmTable":"ipvacloud.data_files_customers"
- },
- {
- "projectName":"traffic_site_history",
- "hdfsSrcPath":"hdfs:///tmp/flume",
- "alarmTable":"ipvacloud.data_files_customers"
- }
- ]
- }
数组(array) 是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
- [
- {
- "projectName":"traffic_site",
- "hdfsSrcPath":"hdfs:///tmp/flume",
- "alarmTable":"ipvacloud.data_files_customers"
- },
- {
- "projectName":"traffic_site_history",
- "hdfsSrcPath":"hdfs:///tmp/flume",
- "alarmTable":"ipvacloud.data_files_customers"
- }
- ]
值(value) 可以是双引号括起来的字符串(string)、数值(number)、true、false、null、对象(object)或者数组(array),这些结构可以嵌套。
字符串(string) 是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。JSON的字符串(string)与C或者Java的字符串非常相似。
数值(number) 也与C或者Java的数值非常相似。只是JSON的数值没有使用八进制与十六进制格式。
使用 JSON 函数需要导入 json 库:import json。
函数 | 描述 |
json.dumps | 将 Python 对象编码成 JSON 字符串 |
json.loads | 将已编码的 JSON 字符串解码为 Python 对象 |
将字典形式的数据转化为字符串, 源码注解 : 将' obj ' '序列化为JSON格式的' str '
实例
- import json
-
- data = [{'hive': 1, 'hadoop': 2, 'hbase': 3, 'flink': 4, 'ambari': 5}]
- print("data数据类型: ", type(data))
-
- # 将一个Python数据类型列表进行json格式的编码
- data2 = json.dumps(data)
- print("data2数据类型: ", type(data2))
- print(data2)
执行结果:
实例
- import json
-
- dict01 = {'a': 'Runoob', 'c': 9, 'b': 7}
- print("dict01数据类型: ", type(dict01))
- print(dict01)
-
- # 按照 key 排序,指定了缩进和分割字符
- data2 = json.dumps(dict01, sort_keys=True, indent=4, separators=(',', ': '))
- print("data2数据类型: ", type(data2))
- print(data2)
执行结果:
python 原始类型向 json 类型的转化对照表:
Python | JSON |
dict | object |
list, tuple | array |
str, unicode | string |
int, long, float | number |
True | true |
False | false |
None | null |
json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型。 源码注解 :反序列化 ' s ' (一个' ' str ' ' ', ' bytes ' ' '或' bytearray ' '实例 包含JSON文档)转换为Python对象
实例:
- import json
-
- jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}'
-
- text = json.loads(jsonData)
- print(type(text))
- print(text)
执行结果:
json 类型转换到 python 的类型对照表:
JSON | Python |
object | dict |
array | list |
string | unicode |
number (int) | int, long |
number (real) | float |
true | True |
false | False |
null | None |
读取JSON文件
- [
- {
- "projectName": "camera_dt1",
- "hdfsSrcPath": "hdfs:///user/hive/warehouse/ipva_camera.db/camera_dt1",
- "retentionTime": "5",
- "fileSuffix": ".copying"
- },
- {
- "projectName": "camera_dt4",
- "hdfsSrcPath": "hdfs:///user/hive/warehouse/ipva_camera.db/camera_dt4",
- "retentionTime": "5",
- "fileSuffix": ".copying"
- }
- ]
解析实例:
- import json
-
- data = open("D:\\bigData\\project\\pythonPro\\kangll-project\\yaml\\hdfsETL.json", "r")
-
- print("data 数据类型: ", type(data))
- # load操作的是文件流
- data01 = json.load(data)
- print("data01 数据类型: ", type(data01))
-
- print(data01[0])
- print("data01[0] 数据类型: ", type(data01[0]))
-
- # 根据key 获取Value或者使用get方法
- print(data01[0].get("projectName"))
- print(data01[0]["projectName"])
-
-
- print(data01[1].get("hdfsSrcPath"))
- print(data01[1]["hdfsSrcPath"])
执行结果:
- #!/usr/bin/python
- # -*- coding: utf-8 -*-
- import requests
- import json
- import sys
- import os
-
- headers = {'Content-Type': 'application/json;charset=utf-8'}
-
- # 当前路径
- path=sys.path[0]
- def msg(text, api_url):
- """
- 钉钉消息发送
- :param text:
- :param api_url:
- :return:
- """
- # content 对应的 text为消息内容
- json_text= {
- "msgtype": "text",
- "text": {
- "content": text
- },"at": {
- "atMobiles": ["1786001xxxx"]
- }
-
- }
- # json.dumps 将字典形式的数据转化为字符串
- print requests.post(api_url,json.dumps(json_text),headers=headers).content
-
-
- if __name__ == '__main__':
- # 读取要告警的text文件
- f = open(path + "/tmp/text", "r")
- line = f.readline()
- text= '告警类型:HostName-配置重复\n'
-
- count = 1
- # 遍历
- while line:
- if (count >= 2):
- text = text + line
- line = f.readline()
- count += 1
- f.close()
- # 钉钉的URL
- api_url="https://oapi.dingtalk.com/robot/send?access_token=749b2f448e357b7ffc1bff7b01d3c26a750dfaec75651680fdc8703152837f65"
- # 消息发送
- msg(text,api_url)
执行脚本:
告警成功
Python系列模块之标准库OS详解_开着拖拉机回家的博客-CSDN博客
python中json用法详解_python json_IT之一小佬的博客-CSDN博客
利用python解析json文件_51CTO博客_python解析json文件