Json格式解析
文章目录
- Json格式介绍
- python中json模块的使用
Json格式介绍
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于 ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于语言的文本格式来存储和表示数据。JSON易于人阅读和编写,同时也易于机器解析和生成。
JSON格式的基本结构是基于两种类型的值:
简单值:这些包括字符串、数字、布尔值(true 或 false)、null、JSON数组(由方括号 [] 包围的值的列表)和JSON对象(由大括号 {} 包围的键值对的列表)。复合值:JSON对象和JSON数组可以用来组合简单值和复合值以创建更复杂的数据结构。
JSON对象
JSON对象是一个无序的键值对集合,其中每个键都是一个字符串,每个值都可以是一个简单值或另一个JSON对象或JSON数组。
{"key1": "value1","key2": 123,"key3": true,"key4": null,"key5": [1, 2, 3],"key6": {"nestedKey1": "nestedValue1","nestedKey2": "nestedValue2"}
}
JSON数组
JSON数组是一个有序的值列表,用方括号包围。数组中的每个值都可以是一个简单值或另一个JSON对象或JSON数组。
["value1",123,true,null,{"key1": "value1","key2": "value2"},[1, 2, 3]
]
字符串
JSON中的字符串必须使用双引号(")包围,而不是单引号(')。
{"name": "John Doe","greeting": "Hello, world!"
}
数字
JSON支持整数和浮点数。
{"age": 30,"score": 9.8
}
布尔值
JSON中的布尔值只能是 true 或 false。
{"isStudent": true,"hasGraduated": false
}
Null
JSON中的 null 值表示空或不存在的值。
{"address": null
}
JSON格式简洁清晰,易于阅读和编写,因此在Web开发中广泛用作前后端数据交换的格式。在Python、JavaScript、Java、C#等许多编程语言中都有现成的库或函数来处理JSON数据的编码(序列化)和解码(反序列化)。
python中json模块的使用
在Python中,json模块是用于处理JSON数据的标准库。你可以使用它来将Python对象编码(或序列化)成JSON格式的字符串,也可以将JSON格式的字符串解码(或反序列化)成Python对象。以下是json模块的一些基本用法示例:
编码(序列化)
将Python对象(如字典、列表、字符串、数字等)转换为JSON格式的字符串。
import json# Python字典
data = {"name": "John","age": 30,"city": "New York"
}# 使用json.dumps()将Python对象编码为JSON字符串
json_string = json.dumps(data)print(json_string)
# 输出: {"name": "John", "age": 30, "city": "New York"}# 你可以使用参数来定制输出的JSON字符串,比如缩进以增加可读性
pretty_json_string = json.dumps(data, indent=4)print(pretty_json_string)
# 输出:
# {
# "name": "John",
# "age": 30,
# "city": "New York"
# }
解码(反序列化)
将JSON格式的字符串转换为Python对象(如字典、列表等)。
import json# JSON字符串
json_string = '{"name": "John", "age": 30, "city": "New York"}'# 使用json.loads()将JSON字符串解码为Python对象
data = json.loads(json_string)print(data)
# 输出: {'name': 'John', 'age': 30, 'city': 'New York'}# 你可以看到解码后的数据是一个Python字典
print(type(data))
# 输出: <class 'dict'># 如果JSON字符串表示一个数组,解码后将得到Python列表
json_array_string = '[1, 2, 3, "four"]'
data_array = json.loads(json_array_string)print(data_array)
# 输出: [1, 2, 3, 'four']
写入文件
将Python对象编码为JSON格式,并写入到文件中。
import jsondata = {"name": "John","age": 30,"city": "New York"
}# 使用with语句打开文件,并将数据写入到文件中
with open('data.json', 'w') as f:json.dump(data, f)
从文件读取
从文件中读取JSON数据,并解码为Python对象。
import json# 使用with语句打开文件,并读取数据
with open('data.json', 'r') as f:data = json.load(f)print(data)
# 输出: {'name': 'John', 'age': 30, 'city': 'New York'}
错误处理
当处理JSON数据时,可能会遇到格式错误或无法序列化的对象。为了避免程序崩溃,你可以使用try和except语句来捕获可能抛出的异常。
import jsontry:# 尝试解码一个格式错误的JSON字符串data = json.loads('{"name": "John", "age": "thirty"}')
except json.JSONDecodeError as e:print(f"解码错误: {e}")try:# 尝试序列化一个无法序列化的对象,如包含datetime的复杂对象complex_data = {"name": "John", "timestamp": datetime.datetime.now()}json.dumps(complex_data)
except TypeError as e:print(f"序列化错误: {e}")
在使用json模块时,确保你的数据是可以被序列化的,并且JSON字符串的格式是正确的,否则你可能会遇到错误。
相关文章:
Json格式解析
文章目录 Json格式介绍python中json模块的使用 Json格式介绍 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于 ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于语言…...

Java Day13 多线程
多线程 1、 方式一 Thread2、实现Runnable接口3、实现 Callable接口4、与线程有关的操作方法5、线程安全问题5.1 取钱案例5.2 线程同步5.2.1 同步代码块5.2.2 同步方法5.2.3 Lock锁 6、线程池6.2 创建线程池6.2.1 使用ExecutorService创建新任务策略6.2.2 使用Executors工具类创…...
以太坊的演变:EIP、ERC 概念以及革命性的 ERC20、ERC721 和 ERC115 标准
文章目录 一、EIP——以太坊发展的基石1.1 什么是EIP?1.2 历史背景:前身的 BIP1.3 EIP的重要性1.4 流程:从提案到实施 二、进入 ERC——以太坊内的标准化协议2.1 解读 ERC:以太坊征求意见2.2 ERC 标准的诞生和意义 三、聚焦 ERC20…...

B003-springcloud alibaba 服务治理 nacos discovery ribbon feign
目录 服务治理服务治理介绍什么是服务治理相关方案 nacos实战入门搭建nacos环境安装nacos启动nacos访问nacos 将商品微服务注册进nacos将订单微服务注册进nacos订单服务通过nacos调用商品服务 实现服务调用的负载均衡什么是负载均衡代码实现负载均衡增加一个服务提供者自定义实…...
mac笔记本执行定时任务
1.mac本地设置一个定时任务每小时执行一次,在/Users/xxx/go/src/runing目录下执行命令:./git_push.sh 在macOS中,你可以使用crontab来设置定时任务。打开终端并执行以下步骤: 1.打开当前用户的crontab编辑器: crontab …...

解决linux系统网卡加载慢的问题
手上有块开发板,启动系统后,需要五六分钟后无线wifi网卡才能加载起来,网卡型号是qca9377。 第一步先确认是不是第一时间挂载到PCI总线上了,在ath10k_pci_probe函数中添加调试信息,另外查看/sys/bus/pci/drivers/ath10…...
Linux 命令或者一些工具
locale – 设置和显示程序运行的语言环境 locale -a | grep en_US.UTF-8.sudo locale-gen en_US.UTF-8sudo dpkg-reconfigure localesexpect 常用命令总结 expect命令spawnexpectsendexp_continuesend_userexit chrpath工具 chrpath 是一个用于修改可执行文件或共享库的运行…...

基于python的4s店客户管理系统
技术:pythonmysqlvue 一、背景 进入21世纪网络和计算机得到了飞速发展,并和生活进行了紧密的结合。目前,网络的运行速度以达到了千兆,覆盖范围更是深入到生活中的角角落落。这就促使管理系统的发展。网上办公可以实现远程处理事务…...

解决谷歌浏览器最新chrome94版本CORS跨域问题
项目场景: 谷歌浏览器升级到chrome94版本出现CORS跨域问题 问题描述 解决谷歌浏览器最新chrome94版本CORS跨域问题。 CORS跨域问题: 升级谷歌浏览器最新chrome94版本后,提示Access to XMLHttpRequest at ‘http://localhost:xxxx/api’ fro…...

JAVA 线程
目录 一、线程的定义 二、线程的实现 三、线程状态 程序并发执行多个任务 二、线程的实现 1、继承Thread类创建线程:通过继承Java的Thread类并重写其run()方法,可以创建一个新的线程。然后,通过调用线程的start()方法来启动线程…...
Rust 基于 await、async 的异步编程和纤程、协程的实现
一、Rust 的异步编程 Rust 通过 await、async 实现了其他语言中纤程、协程的机制。下面是一个使用async和await的Rust示例代码。这个示例展示了如何异步地读取文件内容。 首先,确保你的Cargo.toml文件包含了tokio库的依赖,如下: [dependen…...

【进阶五】Python实现SDVRP(需求拆分)常见求解算法——差分进化算法(DE)
基于python语言,采用经典差分进化算法(DE)对 需求拆分车辆路径规划问题(SDVRP) 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整3. 求解结果4. 代码片段参考 往期优质资源 经过一年多的创作,目前已经成…...

什么是神经网络?
一、什么是神经网络? 神经网络又称人工神经网络,是一种基于人脑功能模型的计算架构,因此称之为“神经”。神经网络由一组称为“节点”的处理单元组成。这些节点相互传递数据,就像大脑中的神经元相互传递电脉冲一样。 神经网络在…...
基于Python的图形用户界面设计及应用
基于Python的图形用户界面设计及应用 摘要:随着信息技术的飞速发展,图形用户界面(GUI)已成为现代软件不可或缺的一部分。Python作为一种简洁、易读且功能强大的编程语言,提供了多种GUI开发工具包,如Tkinte…...

python网络爬虫实战教学——urllib的使用(1)
文章目录 专栏导读1、前言2、urllib的使用3、发送请求3.1 urlopen3.2 request 专栏导读 ✍ 作者简介:i阿极,CSDN 数据分析领域优质创作者,专注于分享python数据分析领域知识。 ✍ 本文录入于《python网络爬虫实战教学》,本专栏针对…...

简述归并排序
归并排序 特点: 高效稳定时间复杂度最佳/平均/最差: O(N log N) 递归算法有专门的公式来计算时间复杂度 空间复杂度 O(N) 因为开辟了临时的tem_arr数组 一个静态的演示图(from leetcode) 一个动态的演示图 合并实现使用merge函数 inline void merge(v…...

HTML实现卷轴动画完整源码附注释
动画效果截图 页面的html结构代码 <!DOCTYPE html> <html> <head lang=...

sh: 1: dtc: not found
报错: bl31.bin size: 41632 u-boot-nodtb.bin size: 815816 ai_robot.dtb size: 30552 ./mkimage_uboot -E -p 0x3000 -f u-boot-ai-robot.its u-boot-ai-robot.itb sh: 1: dtc: not found ./mkimage_uboot: Cant open u-boot-ai-robot.itb.tmp: No such file …...
laravel 表单验证的 exists、unique 去除软删除字段的校验
use Illuminate\Validation\Rule; exists 去除软删除字段的校验 $validator \Validator::make($data, [phone_new > [Rule::exists(users, phone)->whereNull(deleted_at),]], [phone_new.exists > 手机号不存在,]);unique 去除软删除字段的校验 // 新增 email>r…...

【PHP + 代码审计】函数详解2.0
🍬 博主介绍👨🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...