json序列化:

  json的dumps方法可以将json格式数据序列为python的相关数据类型,比如str,常用于打印,另外,在序列化时,中文汉字被转换为unicode编码,在dumps函数中添加参数ensure_ascii=False可解决;dumps的indent参考可以调整显示格式,即缩进,一般设置为2。【字典中键值对,不管是单还是双引号,dumps后,都是双引号】

json反序列化:

  json的loads方法可以把python数据类型转换为json相应的数据类型格式,反序列化后可以对json数据进行各种操作;反序列化时,键值数据不能用双引号,只能用单引号(如果是双引号,可以用eval)。

键值对如果是单引号,loads报错:

json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

  

import json

print('字典'.center(10,'*'))
s1 = '{"tom":{"age":18,"sex":"男"},"jack":{"age":19,"sex":"女"}}'
s2 = "{'tome':{'age':18,'sex':'男'},'jack':{'age':19,'sex':'女'}}" # 字符串通过json.loads转字典的时候,字符串里面不能为单引号,打印s2会报错
print(json.loads(s1), type(json.loads(s1)))
# 用dumps,字典中键值变成双引号
print(json.dumps(json.loads(s1)), type(json.dumps(json.loads(s1))))
print(json.dumps(json.loads(s1),ensure_ascii=False), type(json.dumps(json.loads(s1),ensure_ascii=False)))
print(json.dumps(json.loads(s1),ensure_ascii=False,indent=2))
# 用str,字典中键值依旧是单引号
print(str(json.loads(s1)), type(str(json.loads(s1)))) # print(json.loads(s2)) # 报错
# 但是,可以通过eval将s2转换为字典
print(eval(s2), type(eval(s2)))
# dumps会将中文转换成unicode编码,加参数ensure_ascii=False解决
print(json.dumps(eval(s2)), type(json.dumps(eval(s2))))
print(json.dumps(eval(s2),ensure_ascii=False), type(json.dumps(eval(s2),ensure_ascii=False))) print('字符串--列表'.center(10,'*'))
la = '[1,2,3,4]'
lb = "[1,2,3,4]"
print(eval(la), type(eval(la)))
print(json.loads(la), type(json.loads(la))) # 字符串转列表[1, 2, 3, 4] <class 'list'>
print(json.dumps(json.loads(la)),type(json.dumps(json.loads(la)))) # 列表转字符串,[1, 2, 3, 4] <class 'str'>
print(eval(lb), type(eval(lb)))
print(json.loads(lb), type(json.loads(lb))) # 字符串转列表[1, 2, 3, 4] <class 'list'>
print(json.dumps(json.loads(lb)),type(json.dumps(json.loads(lb)))) # 列表转字符串,[1, 2, 3, 4] <class 'str'> print('列表--字符串'.center(10,'*'))
user_list = ['tom', 'jack']
user_list2 = ["tom", "jack"]
print(type(json.dumps(user_list)), json.dumps(user_list)) # 列表转字符串 <class 'str'> ["alex", "jason"]
print(type(json.dumps(user_list2)), json.dumps(user_list2))
print(type(json.dumps(user_list2)), str(user_list2)) # 双引号变单引号 print('导入、导出'.center(10,'*'))
dic = {'k1': 1, 'k2': 2}
json.dump(dic, open('db', 'w')) # 将字典序列化导入文件,写入字符串
r = json.load(open('db', 'r')) # 反序列化从文件中导出
print(r, type(r)) # {'k1': 1, 'k2': 2} <class 'dict'>

  

json序列化 & 反序列化的更多相关文章

  1. json序列化反序列化Jackson相关注解

    1.@Transient @Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性:如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则ORM框架 ...

  2. C语言JSON序列化/反序列化

    最近想找一个C语言处理嵌套结构体和结构体数组的json库,理想的是能够很容易处理复杂结构体嵌套,并且使用简单的,但是没找到比较合适的,于是打算自己封装一个: 两个问题: C语言结构体本身没有元数据,这 ...

  3. nodejs - json序列化&反序列化示例

    // demo-json.js var obj = { "name": "LiLi", "age": 22, "sex" ...

  4. spring cloud jackson 枚举json互转 枚举json序列化/反序列化

    先定义一个枚举基类 import com.fasterxml.jackson.databind.annotation.JsonDeserialize; @JsonDeserialize(using = ...

  5. Newtonsoft.Json 序列化反序列化

    public class People { public string name { get; set; } public string age { get; set; } public string ...

  6. 怎样在ASP.NET(C#) 使用Json序列化反序列化问题?

    using System; using System.Collections.Generic; using System.Web; using System.Web.Script.Serializat ...

  7. JSON序列化反序列化

    JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式.它是基于JavaScript语法标准的一个子集. JSON采用完全独立于语言的文本格式,可以很容易在 ...

  8. ASP.NET(C#) Json序列化反序列化帮助类Jsonhelper

    原文地址:https://ken.io/note/csharp-asp.net-jsonhelper using System; using System.Collections.Generic; u ...

  9. 关于spring中请求返回值的json序列化/反序列化问题

    https://cloud.tencent.com/developer/article/1381083 https://www.jianshu.com/p/db07543ffe0a 先留个坑

随机推荐

  1. HDU 1109 Run Away

    题目大意:给一个矩阵的长宽,再给n个点,求矩阵区域内某个点到各个点的最小距离的最大值,输出所求点的坐标 这道题我还是写了随机化乱搞,不过由于比较懒于是就没有写模拟退火,不过也是可以AC的 我们先初始随 ...

  2. Luogu P1341 无序字母对

    突然发现我现在很喜欢打图论题. 然而都是很easy的. 这道题很坑,用C++打了一遍莫名Too many or too few lines. 然后我打出了我的独门绝技Pascal.这可能是我最后一次用 ...

  3. vue 过滤器基本使用

    Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化,例如时间戳格式化. 过滤器可以用在: 双花括号插值 v-bind 表达式 (2.1.0+ 开始支持). 过滤器应该被添加在 JavaSc ...

  4. 聊聊Zookeeper应用场景、架构设计、选主机制

    Zookeeper作为一个分布式协调系统提供了一项基本服务:分布式锁服务,分布式锁是分布式协调技术实现的核心内容.像配置管理.任务分发.组服务.分布式消息队列.分布式通知/协调等,这些应用实际上都是基 ...

  5. IIS_部署出错

    在本地开发环境没问题,但是发布到服务器出现:未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Fil ...

  6. LVM : 简介

    在对磁盘分区的大小进行规划时,往往不能确定这个分区要使用的空间的大小.而使用 fdisk.gdisk 等工具对磁盘分区后,每个分区的大小就固定了.如果分区设置的过大,就白白浪费了磁盘空间:如果分区设置 ...

  7. Ionic 2 中生命周期的命名改变及说明

    原文发表于我的技术博客 本文简要整理了在 Ionic 2 的版本中生命周期命名的改变,以及各个事件的解释. 原文发表于我的技术博客 在之前的课程中讲解了 Ionic 生命周期的命名以及使用,不过在 I ...

  8. Maven 项目生成或者update jdk变为1.5的问题

    在使用Maven构建项目时,生成的maven项目jdk默认使用的是jdk1.5. 在手动修改了jdk之后,update project之后jdk又会变为1.5. 或者用eclipse的Maven插件生 ...

  9. 【Beta阶段】M2事后分析

    先上照片,最后一次开会了啊... 计划 你原计划的工作是否最后都做完了? 如果有没做完的,为什么? 答:没有全部做完,到目前为止,我们的还有几个实验的报告生成功能没有上线.这几个实验的数据处理文件已经 ...

  10. Github的建立及心得体会

    第一次接触Github,这次注册最大的难处就是全英文,着实看不懂.仅凭着认识的几个常用词去了解个具体内容实在是太困难了.所以第一个体会就是要好好学英语背单词,不想看到满屏的英文就感觉头疼,烦躁.第二个 ...