Python中的json对象与string相互转换教程
作者:Python热爱者 发布时间:2022-11-08 04:38:58
首先要明确,python里有json这个库,但并没有json这个类,所以所谓的json对象本质上就是一个dict;而json这个库,用于实现dict到string、string到dict的互转。
更具体一点,json对象(dict)转string用json.dumps(),string转json对象(dict)用json.loads()。(另外dump()是json输出到文件,load()是从文件载入成json。)
对于哪个转哪个用哪个常弄混的问题,可以这么理解:以json为参照点,loads是向载入的动作靠向json所以是string转成json对象,所以dumps是从取出的动作远离json所以是json对象转成string。
一、json对象(dict)转string
1 简单地直接转换----使用json.dumps()
import json
# 变量为dict类型,亦即所谓的json对象
json_dict = {
"username": "root",
"password": "toor"
}
# 变量为str类形,json对象转成的字符串
# 值为'{"username": "root", "password": "toor"}'
json_str = json.dumps(json_dict)
# 注意如果将json_dict和json_str都使用print()直接打印出来,看不出什么区别,因为字符串类型变量print出来后最外层的引号会被脱掉
# 唯一的区别是,打印出来的json_dict键值都使用单引号,而json_str内层使用双引号,外层使用单引号
2 更美观地输出
json对象或者说是dict类型变量是可以直接使用print()函数打印的,但只是那种所有key-value都打印在一行的形式。使用json.dumps()我们可以使用输出成缩进形式。
import json
# 变量为dict类型,亦即所谓的json对象
json_dict = {
"username": "root",
"password": "toor"
}
# 变量为str类形,json对象转成的字符串
# 值为'{"username": "root", "password": "toor"}'
# json_str = json.dumps(json_dict)
# indent是缩进空格数,这里4表示使用4空格缩进
# 值为'{\n "username": "root", \n"password": "toor"\n}'
json_str = json.dumps(json_dict, indent=4)
print(json_str)
# 也可以直接使用json.dump()写到文件
# with open("test.txt", "r", encoding="utf-8") as fd:
# json.dump(json_dict, fd, indent=4)
# logging模块也可以这样转换再打印实现缩进效果
# json_str = json.dumps(json_dict, indent=4)
# logging.info(json_str)
二、string转json对象(dict)
常规的string----指最外层是单引号,内层键值是双引号,且最后一对键值之后没有逗号的字符串。如’{“username”: “root”, “password”: “toor”}'。
特殊的string----指最外层是双引号,内层键值是单引号,或者最一对键值之后有逗号的字符串。如"{‘username’: ‘root’, ‘password’: ‘toor’}"或’{“username”: “root”, “password”: “toor”,}'。
如下图可以看到,对于特殊字符串如果强行使用json.loads()要将其转换成json对象,那最外层双引号或最后的逗号都会触发报错:ValueError: Expecting property name: line x column xx (char xx)
1 常规的string转json对象(dict)----使用json.loads()
import json
# 变量为str类形,待json对象的常规字符串
json_str = '{"username": "root", "password": "toor"}'
# Python学习交流群:711312441
# 变量为dict类型,亦即所谓的json对象
# {'username': 'root', 'password': 'toor'}
json_dict = json.loads(json_str)
2 特殊的string转json对象(dict)----使用ast.literal_eval()
import ast
# 变量为str类形,待json对象的特殊字符串
json_str = "{'username': 'root', 'password': 'toor'}"
# json_str = '{"username": "root", "password": "toor",}'
# json_str = "{'username': 'root', 'password': 'toor',}"
# 变量为dict类型,亦即所谓的json对象
# {'username': 'root', 'password': 'toor'}
json_dict = ast.literal_eval(json_str)
来源:https://blog.csdn.net/qdPython/article/details/128099724
猜你喜欢
- 目录Mock概念Mock类简单的例子体验下 Mock 的功能特点一个相对正式的 Mock 例子一个完整的测试例子断言方法Mock概念mock
- BP神经网络是最简单的神经网络模型了,三层能够模拟非线性函数效果。难点:如何确定初始化参数?如何确定隐含层节点数量?迭代多少次?如何更快收敛
- 1. 折线图折线图(Line Chart)是一种将数据点按照顺序连接起来的图形,也可以看作是将散点图按照X轴坐标顺序链接起来的图形。折线图的
- 防止用户通过后退按钮重复提交表单 <% response.Buffer=true response.Expires=0 respons
- 上文:栅格:从混乱到秩序Jacci Howard Bear 的英文原文:http://desktoppub.about.com/od/gri
- 一:什么是数据库镜像?Robidoux:数据库镜像是将数据库事务处理从一个SQL Server数据库移动到不同SQL Server环境中的另
- 在网站开发过程中,可能需要用PHP实现验证邮箱格式是否正确,那么我们就可以通过PHP中filter_var函数来实现。下面我们就结合具体的代
- 在这篇文章里,我们将会探索如何使用Python语言作为一个工具来检测Linux系统各种运行信息。让我们一起来学习吧。哪种Python?当我提
- 本文实例讲述了django框架模型层功能、组成与用法。分享给大家供大家参考,具体如下:Django models是Django框架自定义的一
- 管理SQL Server内在的帐户和密码时,我们很容易认为这一切都相当的安全。但实际上并非如此。在这里,我们列出了一些对于SQL Serve
- 啥也不说了,还是看代码吧! [root@yyjk DATABASE]# cat DBI.py# -*- coding: utf-8 -*-
- 一、伪装浏览器对于一些需要登录的网站,如果不是从浏览器发出的请求,则得不到响应。所以,我们需要将爬虫程序发出的请求伪装成浏览器正规军。具体实
- 前记在Python3.7后官方库出现了contextvars模块, 它的主要功能就是可以为多线程以及asyncio生态添加上下文功能,即使程
- 一、前言我们在使用pycharm写代码时可能出现过下面这种情况,不小心点到了ignore ....:这样会导致整个代码都没有错误提示了,类似
- CUDA的线程与块GPU从计算逻辑来讲,可以认为是一个高并行度的计算阵列,我们可以想象成一个二维的像围棋棋盘一样的网格,每一个格子都可以执行
- 获取标签内容使用element.attribute()方法获取dom元素的内容,如:dr = driver.find_element_by_
- glob 文件名模式匹配,不用遍历整个目录判断每个文件是不是符合。1、通配符星号(*)匹配零个或多个字符import globf
- 多表查询1. 增删改一对多:先一后多,外键可以为对象或依赖表的主键(publish and book)publish = Publish.o
- python中pass的作用?pass代表一个空的语句块Python中pass的作用:示例1,定义一个类,类中没有任何内容保存,运行之后,该
- PyQt5切换按钮控件QPushButton简介QAbstractButton类为抽象类,不能实例化,必须由其他的按钮类继承QAbstrac