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

news2024/11/27 7:25:22

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

目录

一、Json介绍

二、JSON 函数

2.1 json.dumps

2.2 json.loads

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


一、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文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/573358.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年21个最佳的Ruby测试框架

作者 | Veethee Dixit 测试人员总是在寻找最好的自动化测试框架,它能提供丰富的功能,并且语法简单、兼容性好、执行速度快。如果你选择将Ruby与Selenium结合起来进行web测试,那么可能需要搜索基于Ruby的测试框架进行web应用程序测试。 Ruby…

【Python】函数式编程第二弹

知识目录 一、写在前面✨二、最小公倍数三、移除数字四、总结撒花😊 一、写在前面✨ 大家好!我是初心,希望我们一路走来能坚守初心! 今天跟大家分享的文章是 Python函数式编程第二弹,再次以两个简单的例子带大家更好…

selenium UI自动化中文件上传的两种方式

前言 文件上传是自动化中很常见的一个功能,那么对于文件上传你又有多少了解呢?请往下看 1、被测产品中文件上传的功能非常普遍,一般情况下需要将准备好的文件放在预定的路径下,然后在自动化测试的脚本中,去预置的路径…

国内可以免费使用的GPT

一、wetab新标签页 教程:https://diwlwltzssn.feishu.cn/docx/MnHhdvxATomBnMxfas2cm8wWnVd 装GPT界面:https://microsoftedge.microsoft.com/addons/detail/wetab%E5%85%8D%E8%B4%B9chatgpt%E6%96%B0%E6%A0%87%E7%AD%BE%E9%A1%B5/bpelnogcookhocnaokfp…

TeX Live和TeX studio安装

最近想要研究一下Letex怎么写论文,然后就查阅资料了解了一下,先安装上两个软件,怎么用在研究研究,这里记录一下软件安装过程,方便以后查阅。 TeX Live和TeX studio安装 Latex介绍TexLive安装下载TexLive的安装包安装Te…

C++知识第三篇之继承

C继承 继承是面向对象编程的重要特征,是对类设计层次的复用 文章目录 C继承一.介绍1.继承定义2.继承方式3.class与struct 二.作用域1.成员变量2.成员函数 三.赋值转换1.给基类对象赋值2.给基类对象指针赋值 四.派生类的默认函数五. 其他1.友元2.静态 六.继承1.单继承…

Android车载学习笔记1——车载整体系统简介

一、汽车操作系统 汽车操作系统包括安全车载操作系统、智能驾驶操作系统和智能座舱操作系统。 1. 安全车载操作系统 安全车载操作系统主要面向经典车辆控制领域,如动力系统、底盘系统和车身系统等,该类操作系统对实时性和安全性要求极高,生态…

VCSA 和ESXi 6.7.0版本升级

1. VCSA升级步骤 1)指定升级包的位置 software-packages stage --iso (如果是从vmware下载补丁,使用CD/DVD来映射ISO映像) 或 software-packages stage --url https://vapp-updates.vmware.com/vai-catalog/valm/vmw/8d167796-34d5-4899-be0a-6daade400…

Yolov8涨点神器:注意力机制---多头上下文集成(Context Aggregation)的广义构建模块,助力小目标检测,暴力涨点

🏆🏆🏆🏆🏆🏆Yolov8魔术师🏆🏆🏆🏆🏆🏆 ✨✨✨魔改网络、复现前沿论文,组合优化创新 🚀🚀🚀小目标、遮挡物、难样本性能提升 🍉🍉🍉定期更新不同数据集涨点情况 2.Context Aggregation介绍 论文:https://arxiv.org/abs/2106.01401 仅…

落地页设计的营销心理学(二)

作为一个营销落地页的设计者,最关注的问题:怎么样设计才能让我的落地页有转化? 当然这可能有很多影响因素。但是,你有没有想过在用户打开落地页时,运用心理学概念留住他们,促使他们完成留资、下载、购买等动…

听我一句劝,不要去外包,干了三年,废了....

先说一下自己的情况,大专生,18年通过校招进入湖南某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

Python实战基础12-闭包

1、函数的嵌套调用 def testB():print(-------testB start------)print(这里是testB函数执行的代码……)print(-------testB end ------)def testA():print(-----testA start-----)testB()print(-----testA end------) testA() 运行结果: 总结: 一个函…

PoseiSwap 参赛,参与斯坦福、Nautilus等联合主办的 Hackathon 活动

近日,由 Stanford Blockchain Accelerator、Zebec Protocol、 Nautilus Chain、Rootz Lab 共同主办的“ Boundless Hackathon Stanford ” 主题的黑客松活动,目前已接受报名。该活动旨在帮助更多的优质开发者参与到 Web3 世界的发展中,推动链…

顶满,阿里P8架构师独家分享的微服务实战笔记

微服务简介 简而言之,微服务架构风格是一种将单个应用程序开发为“一套小型服务”的方法,每个服务“运行在自己的进程中”,并通过轻量级机制(通常是HTTP资源API)进行通信。这些服务“围绕业务功能构建”,并通过全自动部署机制“独…

Cortex-M0的内核架构

目录 Cortex-M 系列产品线 Cortex-M0结构框图 Cortex-M0特性 Cortex-M0工作模式 Cortex-M0工作状态 Cortex-M0的寄存器 Cortex-M0的中断和异常 Cortex-M0的指令集 Cortex-M 系列产品线 Cortex-M系列是由ARM(Advanced RISC Machines)开发的一系列…

宁德时代,冷暖自知口难言

作者 | 魏启扬 来源 | 洞见新研社 发布可以“上天”的凝聚态电池、落地能量密度160Wh/kg的钠离子电池、量产系统集成度全球最高的麒麟电池…… 宁德时代在上海车展前后密集发声,坚决捍卫着“宁王”的冠冕。 如果再结合不久前的2022年年报,全年307亿的…

六级备考23天|CET-6|写作技巧1|开头段模版

目录 1 考前注意事项 2 真题参考 3 六级作文三段式 第一段 第二段 第三段 4 名言解释型作文 5 开头段的模版 why 型 6 选择型开头模版 7 国内学校/出国读书 8 团队精神和交流 9 作业 10 抽象意志品质类开头 ​ 11 信任的重要性​ 1 考前注意事项 定位错误 常识干扰 拼凑…

【必读】解密Redis主从同步问题,避免数据不一致!

大家好,我是小米,一个热爱技术的程序员。今天,我要和大家聊一聊Redis中常见的一个问题——主从不一致。作为一款高性能的键值存储系统,Redis主从架构在分布式场景中被广泛应用。然而,由于Redis的特性以及配置不当等原因…

大内存分页用在什么场景下?

此内容可以作为你积累高并发处理技能的一个小小的组成部分。挖掘虚拟内存和内存管理单元更底层的工作原理,以及了解转置检测缓冲区(TLB)的作用。 了解如何通过内存,提升你的程序性能。什么情况下使用大内存分页? 这道…

【四】设计模式~~~创建型模式~~~建造者模式(Java)

【学习难度:★★★★☆,使用频率:★★☆☆☆】 4.1. 模式动机 无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮、方向盘、发送机等各种部件…