• Python系列模块之标准库json详解


        感谢点赞和关注 ,每天进步一点点!加油!

    目录

    一、Json介绍

    二、JSON 函数

    2.1 json.dumps

    2.2 json.loads

    2.3 实战案例:钉钉消息发送


    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介绍


    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基于两种结构:

    • 名称/值”对的集合(A collection of name/value pairs)。不同的编程语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
    • 值的有序列表(An ordered list of values)。在大部分语言中,它被实现为数组(array),矢量(vector),列表(list),序列(sequence)。

    这些都是常见的数据结构。目前,绝大部分编程语言都以某种形式支持它们。这使得在各种编程语言之间交换同样格式的数据成为可能。

    JSON具有以下这些形式:

    对象(object) 是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

    1. {
    2. "HDFSProject":[
    3. {
    4. "projectName":"traffic_site",
    5. "hdfsSrcPath":"hdfs:///tmp/flume",
    6. "alarmTable":"ipvacloud.data_files_customers"
    7. },
    8. {
    9. "projectName":"traffic_site_history",
    10. "hdfsSrcPath":"hdfs:///tmp/flume",
    11. "alarmTable":"ipvacloud.data_files_customers"
    12. }
    13. ]
    14. }

    数组(array 是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

    1. [
    2. {
    3. "projectName":"traffic_site",
    4. "hdfsSrcPath":"hdfs:///tmp/flume",
    5. "alarmTable":"ipvacloud.data_files_customers"
    6. },
    7. {
    8. "projectName":"traffic_site_history",
    9. "hdfsSrcPath":"hdfs:///tmp/flume",
    10. "alarmTable":"ipvacloud.data_files_customers"
    11. }
    12. ]

    值(value 可以是双引号括起来的字符串(string)、数值(number)、true、false、null、对象(object)或者数组(array),这些结构可以嵌套。

    字符串(string) 是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。JSON的字符串(string)与C或者Java的字符串非常相似。

    数值(number) 也与C或者Java的数值非常相似。只是JSON的数值没有使用八进制与十六进制格式。


    二、JSON 函数


    使用 JSON 函数需要导入 json 库:import json

    函数

    描述

    json.dumps

    将 Python 对象编码成 JSON 字符串

    json.loads

    将已编码的 JSON 字符串解码为 Python 对象

    2.1 json.dumps


    将字典形式的数据转化为字符串,  源码注解 : 将' obj ' '序列化为JSON格式的' str '

    实例

    1. import json
    2. data = [{'hive': 1, 'hadoop': 2, 'hbase': 3, 'flink': 4, 'ambari': 5}]
    3. print("data数据类型: ", type(data))
    4. # 将一个Python数据类型列表进行json格式的编码
    5. data2 = json.dumps(data)
    6. print("data2数据类型: ", type(data2))
    7. print(data2)

    执行结果:

    实例

    1. import json
    2. dict01 = {'a': 'Runoob', 'c': 9, 'b': 7}
    3. print("dict01数据类型: ", type(dict01))
    4. print(dict01)
    5. # 按照 key 排序,指定了缩进和分割字符
    6. data2 = json.dumps(dict01, sort_keys=True, indent=4, separators=(',', ': '))
    7. print("data2数据类型: ", type(data2))
    8. print(data2)

    执行结果:

    python 原始类型向 json 类型的转化对照表:

    Python

    JSON

    dict

    object

    list, tuple

    array

    str, unicode

    string

    int, long, float

    number

    True

    true

    False

    false

    None

    null

    2.2 json.loads


    json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型。 源码注解 :反序列化 ' s ' (一个' ' str ' ' ', ' bytes ' ' '或' bytearray ' '实例 包含JSON文档)转换为Python对象

    • loads操作的是字符串
    • load操作的是文件流

    实例:

    1. import json
    2. jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}'
    3. text = json.loads(jsonData)
    4. print(type(text))
    5. 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文件

    1. [
    2. {
    3. "projectName": "camera_dt1",
    4. "hdfsSrcPath": "hdfs:///user/hive/warehouse/ipva_camera.db/camera_dt1",
    5. "retentionTime": "5",
    6. "fileSuffix": ".copying"
    7. },
    8. {
    9. "projectName": "camera_dt4",
    10. "hdfsSrcPath": "hdfs:///user/hive/warehouse/ipva_camera.db/camera_dt4",
    11. "retentionTime": "5",
    12. "fileSuffix": ".copying"
    13. }
    14. ]

    解析实例:

    1. import json
    2. data = open("D:\\bigData\\project\\pythonPro\\kangll-project\\yaml\\hdfsETL.json", "r")
    3. print("data 数据类型: ", type(data))
    4. # load操作的是文件流
    5. data01 = json.load(data)
    6. print("data01 数据类型: ", type(data01))
    7. print(data01[0])
    8. print("data01[0] 数据类型: ", type(data01[0]))
    9. # 根据key 获取Value或者使用get方法
    10. print(data01[0].get("projectName"))
    11. print(data01[0]["projectName"])
    12. print(data01[1].get("hdfsSrcPath"))
    13. print(data01[1]["hdfsSrcPath"])

    执行结果:

    2.3 实战案例:钉钉消息发送


    1. #!/usr/bin/python
    2. # -*- coding: utf-8 -*-
    3. import requests
    4. import json
    5. import sys
    6. import os
    7. headers = {'Content-Type': 'application/json;charset=utf-8'}
    8. # 当前路径
    9. path=sys.path[0]
    10. def msg(text, api_url):
    11. """
    12. 钉钉消息发送
    13. :param text:
    14. :param api_url:
    15. :return:
    16. """
    17. # content 对应的 text为消息内容
    18. json_text= {
    19. "msgtype": "text",
    20. "text": {
    21. "content": text
    22. },"at": {
    23. "atMobiles": ["1786001xxxx"]
    24. }
    25. }
    26. # json.dumps 将字典形式的数据转化为字符串
    27. print requests.post(api_url,json.dumps(json_text),headers=headers).content
    28. if __name__ == '__main__':
    29. # 读取要告警的text文件
    30. f = open(path + "/tmp/text", "r")
    31. line = f.readline()
    32. text= '告警类型:HostName-配置重复\n'
    33. count = 1
    34. # 遍历
    35. while line:
    36. if (count >= 2):
    37. text = text + line
    38. line = f.readline()
    39. count += 1
    40. f.close()
    41. # 钉钉的URL
    42. api_url="https://oapi.dingtalk.com/robot/send?access_token=749b2f448e357b7ffc1bff7b01d3c26a750dfaec75651680fdc8703152837f65"
    43. # 消息发送
    44. msg(text,api_url)

    执行脚本:

    告警成功

    Python系列模块之标准库OS详解_开着拖拉机回家的博客-CSDN博客

    Python JSON | 菜鸟教程

    python中json用法详解_python json_IT之一小佬的博客-CSDN博客

    利用python解析json文件_51CTO博客_python解析json文件

     

     

  • 相关阅读:
    c++征途 --- 函数
    echarts-wordcloud ——文字云制作企业标签——基础积累
    多模态模型和大型语言模型(LLM):概念解析与实例探究
    2023年第一批次申请考核制博士网上报名相关通知
    【GO开发工程师】grpc进阶#golang
    Docker安装Seata
    持续集成交付CICD:安装Jenkins Slave(从节点)
    Debian常用命令
    算法分析——大O标记法之时间复杂度
    web前端面试题附答案002-说一下react组件间的数据传递
  • 原文地址:https://blog.csdn.net/qq_35995514/article/details/130892472