JSON及Python操作JSON相关

JSON及Python操作JSON相关

Json简介及Python操作Json相关示例。

1. JSON概念及支持的数据类型

1.1 什么是 JSON?

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。尽管 JSON 源于 JavaScript,它与编程语言无关,目前被广泛应用于各种编程语言中。

1.2 JSON 支持的数据类型

JSON 支持以下几种基本数据类型:

  • 两种特殊类型:数组(array)、对象(object)
  • 四种基础类型:字符串(string)、数字(number)、布尔型(boolean)、NULL值
  1. 对象(Object)
  • 表示为一组无序的键值对集合,用花括号 {} 包裹。
  • 键必须是字符串,并且用双引号包裹。
  • 每个键值对之间用逗号 , 分隔。
  • 键和值之间用冒号 : 分隔。

示例:

{"name": "John","age": 30,"isStudent": false,"address": {"city": "New York","zip": "10001"}
}
  1. 数组(Array)
  • 表示为一个有序的值集合,用方括号 [] 包裹。
  • 各个值之间用逗号 , 分隔。

示例:

["apple","banana","cherry"
]

json对象和字符串区别:

特性JSON 对象JSON 数组
表示花括号 {} 包裹方括号 [] 包裹
数据形式无序的键值对集合有序的值的集合
字符串(用双引号包裹)无键,只有索引
可以是任何JSON数据类型可以是任何JSON数据类型
使用场景表示复杂结构化数据表示有序列表数据
  1. 字符串(String)
  • 表示为一串字符序列,用双引号 " 包裹。
  • 可以包含转义字符,例如 \" 表示双引号,\\ 表示反斜杠,\n 表示换行符等。

示例:

"Hello, world!"
  1. 数字(Number)
  • 表示为整数或浮点数。
  • 可以是正数、负数,或零。

示例:

42
3.14
  1. 布尔值(Boolean)

表示为 truefalse

示例:

true
false
  1. 空值(Null)

表示为空值,使用 null

示例:

null

2. 示例代码

2.1 读取JSON文件

在Python中,你可以使用json模块读取JSON文件。这是最常见的操作。

import json# 读取JSON文件
with open('data.json', 'r', encoding='utf-8') as file:data = json.load(file)  # 读取并解析JSON数据# 打印数据
print(data)

这里我们使用json.load()读取并解析JSON文件,并将结果存储在data变量中。

2.2 写入JSON文件

你可以使用json.dump()将Python数据结构写入JSON文件。

import json# 要写入的Python数据
data = {"name": "Alice","age": 30,"skills": ["Python", "Data Analysis", "Machine Learning"]
}# 写入到JSON文件
with open('output.json', 'w', encoding='utf-8') as file:json.dump(data, file, indent=4)  # 使用缩进格式化输出

这个示例使用json.dump()将字典写入JSON文件。

2.3 解析JSON字符串

有时数据可能以JSON字符串的形式存在。这时你可以使用json.loads()来解析它。

import json# 一个JSON字符串
json_str = '{"name": "Bob", "age": 25, "city": "New York"}'# 解析JSON字符串
data = json.loads(json_str)print(data)  # {'name': 'Bob', 'age': 25, 'city': 'New York'}

2.4 将Python数据转换为JSON字符串

与解析JSON字符串类似,你可以使用json.dumps()将Python数据转换为JSON字符串。

import json# 一个Python数据结构
data = {"name": "Charlie","hobbies": ["Reading", "Swimming", "Hiking"]
}# 将Python数据转换为JSON字符串
json_str = json.dumps(data, indent=4)print(json_str)  # JSON格式的字符串

2.5 处理复杂JSON数据

JSON数据可以包含嵌套的结构。Python可以方便地处理这些复杂数据。

import json# 一个包含嵌套结构的JSON
nested_json = {"name": "Dave","age": 40,"children": [{"name": "Amy", "age": 10},{"name": "Ben", "age": 8}],"contact": {"email": "dave@example.com","phone": "+1234567890"}
}# 将Python数据转换为JSON字符串
json_str = json.dumps(nested_json, indent=4)print(json_str)

在这个示例中,我们创建了一个包含嵌套结构的Python数据,然后将其转换为JSON字符串以进行输出。

3. 总结

3.1 json模块中load、loads、dump、dumps函数的区别总结

函数描述参数返回值用途
load从文件读取JSON数据,并转换为Python对象- file object: 包含JSON数据的文件对象Python对象从文件中读取并解析JSON数据
loads从字符串读取JSON数据,并转换为Python对象- str: JSON格式的字符串Python对象从字符串中读取并解析JSON数据
dump将Python对象编码为JSON数据并写入文件- obj: Python对象
- file object: 文件对象
将Python对象写入文件中
dumps将Python对象编码为JSON格式的字符串- obj: Python对象JSON格式的字符串将Python对象转换为JSON字符串

3.2 JSON类型与Python类型的对照表

JSON 类型Python 类型示例
objectdict{"name": "John", "age": 30} -> {'name': 'John', 'age': 30}
arraylist[1, 2, 3] -> [1, 2, 3]
stringstr"hello" -> 'hello'
numberintfloat42 -> 42
3.14 -> 3.14
trueTruetrue -> True
falseFalsefalse -> False
nullNonenull -> None

3.3 区分Python字符串和JSON字符串

1. 语法上区分

  • Python 字符串:是用单引号 ’ 或双引号 " 包裹的字符序列。
  • JSON 字符串:是用双引号 " 包裹的字符序列,并且内容必须是合法的 JSON 数据格式。

2. 内容格式

  • Python 字符串:可以包含任何字符,包括单引号和双引号,但不要求符合 JSON 格式。
  • JSON 字符串:必须符合 JSON 标准,通常是一个对象(用 {} 包裹)或数组(用 [] 包裹),并且内部的键必须是用双引号包裹的字符串。

3. 通过Python代码判断
可以使用 json 模块的 loads 函数来尝试解析字符串,如果解析成功,则是合法的 JSON 字符串;如果解析失败,则是普通的 Python 字符串。

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

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

相关文章

56.WEB渗透测试-信息收集- 端口、目录扫描、源码泄露(4)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:55.WEB渗透测试-信息收集- 端口、目录扫描、源码泄露(3) 如果把文…

【PyTorch】PyTorch深度学习框架实战(二):torchrun

一、引言 PyTorch由facebook人工智能研究院研发,2017年1月被提出,是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。PyTorch既可以看作加入了GPU支持的numpy,同时也可以看成一个拥有自动求导功能的…

SpringAI调用OpenAI Demo

Spring AI 在maven的setting.xml <mirror> <id>spring-milestones</id> <name>Spring Milestones</name> <mirrorOf>spring-milestones</mirrorOf> <url>https://repo.sprin…

AI学习指南机器学习篇-决策树的特征选择和分裂准则

AI学习指南机器学习篇-决策树的特征选择和分裂准则 1. 特征选择的方法 在机器学习中&#xff0c;特征选择是一项非常重要的任务&#xff0c;它直接影响到模型的性能和泛化能力。决策树是一种常用的机器学习算法之一&#xff0c;而特征选择则是决策树构建过程中的关键环节。常…

数据结构:顺序串

目录 1.顺序串是什么&#xff1f; 2.顺序串常见操作和应用 3.包含头文件 4.结点设计 5.接口函数定义 6.接口函数实现 7.顺序串测试案列 顺序串是什么&#xff1f; 顺序串&#xff0c;用于存储和操作字符串。在顺序串中&#xff0c;字符串被存储在一个连续的内存块中&#xff0c…

51单片机-实机演示(LED点阵)

目录 前言: 一.线位置 二.扩展 三.总结 前言: 这是一篇关于51单片机实机LED点阵的插线图和代码说明.另外还有一篇我写的仿真的连接在这:http://t.csdnimg.cn/ZNLCl,欢迎大家的点赞,评论,关注. 一.线位置 接线实机图. 引脚位置注意: 1. *-* P00->RE8 P01->RE7 …

Android Kotlin 异步操作回调转换为挂起函数

异步接口回调是一种通过接口将任务的执行和结果处理分离开来的编程设计模式。通常用于网络请求、数据库查询等耗时操作。 挂起函数是 Kotlin 中的一个特性&#xff0c;用于简化异步编程。挂起函数是可以在协程中暂停执行并恢复的函数&#xff0c;避免了回调地狱问题&#xff0…

Golang | Leetcode Golang题解之第137题只出现一次的数字II

题目&#xff1a; 题解&#xff1a; func singleNumber(nums []int) int {a, b : 0, 0for _, num : range nums {b (b ^ num) &^ aa (a ^ num) &^ b}return b }

AI视频教程下载:生成式AI—从入门到精通

生成式人工智能正在彻底改变我们的生活。 本视频教程让您全面了解生成式人工智能的基本概念、模型、工具和应用&#xff0c;使您能够利用生成式人工智能的潜力&#xff0c;改善工作场所、事业和生活。 该视频教程由五门自定进度的短期课程组成&#xff0c;每门课程需要 3-5 个…

ChatGPT-4o在临床医学日常工作、数据分析与可视化、机器学习建模中的技术

2022年11月30日&#xff0c;可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT-3.5&#xff0c;将人工智能的发展推向了一个新的高度。2023年11月7日&#xff0c;OpenAI首届开发者大会被称为“科技界的春晚”&#xff0c;吸引了全球广大…

SQL查询的优化方案

SQL查询优化是一个重要的数据库管理任务&#xff0c;它可以帮助提升查询性能&#xff0c;减少响应时间和系统资源消耗。以下是一些关键的优化策略及其示例&#xff1a; 1. 使用索引 (Indexing) 优化说明: 索引能够显著加快数据检索速度&#xff0c;特别是对于大表上的查询。为…

【中心拓展法-BM73 最长回文子串】

题目 BM73 最长回文子串 分析 中心拓展法&#xff1a; 中心有两种&#xff1a; 将字母作为中心&#xff08;starti,end i)&#xff0c;将字母后的间隙作为中心(start i, end i1) 此时要注意begin 和end之间字母数量的计算&#xff1a; begin 和end 之间的字母数量应为…

数据挖掘--数据预处理

数据清理 缺失值 如果数据集含有分类属性&#xff0c;一种简单的填补缺失值的方法为&#xff0c;将属于同一类的对象的该属性值的均值赋此缺失值&#xff1b;对于离散属性或定性属性&#xff0c;用众数代替均值。更复杂的方法&#xff0c;可以将其转换为分类问题或数值预测问…

python项目中到底使用什么解释器更合适?

在Python开发中&#xff0c;选择使用项目专用的解释器还是系统共用的解释器主要取决于你的项目需求、团队协作规范以及对环境隔离的需求。下面是一些指导原则来帮助你决定&#xff1a; 项目专用解释器&#xff08;虚拟环境&#xff09; 优点: 环境隔离&#xff1a;每个项目拥…

再次修改了备忘录

Control <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>与妖为邻备忘录</title><!-- <…

如何挑选最适合你的渲染工具

随着技术的发展&#xff0c;云渲染平台逐渐成为设计师、动画师、影视制作人员等创意工作者的得力助手。然而&#xff0c;市场上的云渲染平台种类繁多&#xff0c;如何选择最适合自己的渲染工具成为了一个需要认真考虑的问题。 在挑选适合自己的云渲染工具时&#xff0c;我们需…

系统与软件工程软件测试文档

组织级软件测试文档结构图集 组织级测试过程文档集 组织级测试规格说明描述组织层面的测试信息&#xff0c;并且不依赖于项目。其在组织级测试过程中的典型事例包括&#xff1a; 测试方针&#xff1a;测试方针定义了组织内适用的软件测试的目的和原则&#xff0c;它定义了测试…

哈希表和二维矩阵的结合-2352. 相等行列对(新思路、新解法)

题目链接及描述 . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/equal-row-and-column-pairs/description/?envTypest…

AIGC+营销:AI在营销领域的演变与营销人员的新角色

一、AI在营销领域的演变 随着AI技术的不断发展&#xff0c;营销领域也迎来了新的变革。从目前的“AI Copilot”阶段&#xff0c;到未来的“AI Agent”和“AI自主营销团队”阶段&#xff0c;AI的角色将逐渐从辅助人类到独立承担更多职责。 AI Copilot&#xff08;副驾驶&#…

Python初步使用教程

1.基本输出print函数 a10 b20 print(a)#输出结束后会自动换行 print(b) print(a,b,猪猪侠)#print中sep决定三者之间会存在空格#连接方法一 print(猪猪,end) print(侠) #连接方法二&#xff08;只能是字符串和字符串连&#xff09; print(超级无敌)print(chr(67)) print(ord(猪…