首页 前端知识 【Python】系列模块之标准库json详解

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

2024-06-02 09:06:36 前端知识 前端哥 139 226 我要收藏

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

目录

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

{
  "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 函数需要导入 json 库:import json

函数

描述

json.dumps

将 Python 对象编码成 JSON 字符串

json.loads

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

2.1 json.dumps


将字典形式的数据转化为字符串,  源码注解 : 将' 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

2.2 json.loads


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

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

实例:

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"])

执行结果:

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


#!/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用法详解_python json_IT之一小佬的博客-CSDN博客

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

 

 

转载请注明出处或者链接地址:https://www.qianduange.cn//article/10568.html
评论
发布的文章

vue学习计划

2024-06-08 18:06:08

fastjson1.2.24-RCE漏洞复现

2024-06-08 09:06:33

JsonPath用法详解

2024-06-08 09:06:55

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!