Python包:json扩展包demjson使用
时间:2022-07-25
本文章向大家介绍Python包:json扩展包demjson使用,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Json在编程中是一种轻量级的文件格式,在本地开发或者web开发中使用较多。参考维基百科介绍如下:
JSON(JavaScript Object Notation,JavaScript对象表示法,读作/ˈdʒeɪsən/)是一种由道格拉斯·克罗克福特构想和设计、轻量级的资料交换语言,该语言以易于让人阅读的文字为基础,用来传输由属性值或者序列性的值组成的数据对象。尽管JSON是JavaScript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。 JSON 数据格式与语言无关。即便它源自JavaScript,但目前很多编程语言都支持 JSON 格式数据的生成和解析。JSON 的官方 MIME 类型是
application/json
,文件扩展名是.json
。
在python应用中,一般将列表或者字典等数据保存为json格式的字符串形式,以便后续使用。
json
在python的包中,有json
这个包,直接拿来用即可,已经安装好。
常用的命令就两个:
-
json.dumps
/json.dump
: 将 Python 对象编码成 JSON 字符串 / 编码成json格式文件 -
json.loads
/json.load
: 解码python json格式 / 加载python json格式文件
带s
与不带s
的区别在于不带s的一般与文件打交道,带s的只是转换形式。
例如:
import json
d = {"hello": "world"}
d_s = json.dumps(d) # '{"hello": "world"}'
fp = file('test_json.txt', 'w')
json.dump(d, fp)
d = json.loads(d_s) # d: {"hello": "world"}
d = json.load(fp)
问题
今天写接口的时候遇到一个问题,json解析会报错
假设原始数据为:
d_s = "{'姓名': '张拨武', '性别': '男', '住址': "湖南省株洲县姚家坝乡南田桥村万和防组'9号", '身份证号': '4302211', '民族': '汉'}"
前端传过来的其中一个参数是这样的,address对应的value中含有一个‘
, 直接用json解析会报错:
JSONDecodeError: Expecting value: line 1 column 51
解决办法
- 使用re字符替换的方式进行替换,但是发现其它部位也存在
‘
, 无法区分开 - 找到json的扩展包demjson
Demjson是 python 的第三方模块库,可用于编码和解码 JSON 数据,包含了 JSONLint 的格式化及校验功能。
安装
pip install demjson
使用
- demjson.encode: 将 Python 对象编码成 JSON 字符串
- demjson.decode: 将已编码的JSON 字符串解码为 Python 对象
该包功能相较于json而言具有格式化校验功能, 能够解决这种多出来的‘
问题
import demjson
d_s = "{'姓名': '张拨武', '性别': '男', '住址': "湖南省株洲县姚家坝乡南田桥村万和防组'9号", '身份证号': '4302211', '民族': '汉'}"
d = demjson.decode(d_s) # d : {'姓名': '张拨武', '性别': '男', '住址': "湖南省株洲县姚家坝乡南田桥村万和防组'9号", '身份证号': '4302211', '民族': '汉'}
d = {'1': 1}d_s = demjson.encode(d) # d_s: '{"1": 1}'
类似的还有其他不规则的格式:
"{x:1, y:2, z:3}" - > {x:1, y:2, z:3}
"{'x':1, 'y':2, 'z':3}" -> {'x':1, 'y':2, 'z':3}
'{"x":1, "y":2, "z":3}' -> {"x":1, "y":2, "z":3}
可以解决上述问题, 总的来说:
- 遇到问题不要慌,多思考问题点在哪里,基于问题点去找解决方法
- python的扩展包太多太强大,需要不断积累
参考
- https://www.runoob.com/python/python-json.html
- https://zh.wikipedia.org/zh-hans/JSON
- demjson: https://github.com/dmeranda/demjson
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 解决Android WebView拦截url,视频播放加载失败的问题
- Android 极光推送别名与标签方式
- Android Webview的postUrl与loadUrl加载页面实例
- android Web跳转到app指定页面并传递参数实例
- Dialog全屏,去掉状态栏的方式
- Android 通过TCP协议上传指定目录文件的方法
- Android webview加载https链接错误或无响应的解决
- Android Manifest中meta-data扩展元素数据的配置与获取方式
- Android 配置gradle实现VersionCode自增实例
- 解决Android Studio Gradle Metadata特别慢的问题
- Android ProgressDialog用法之实现app上传文件进度条转圈效果
- Android实现获取meta-data和build.gradle的值
- 浅谈Android Studio导出javadoc文档操作及问题的解决
- Android获取清单文件中的meta-data,解决碰到数值为null的问题
- android studio 打包自动生成版本号与日期,apk输入路径详解