专栏首页AI科技时讯Python包:json扩展包demjson使用

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

解决办法

  1. 使用re字符替换的方式进行替换,但是发现其它部位也存在, 无法区分开
  2. 找到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

本文分享自微信公众号 - AI科技时讯(aiblog_research),作者:海棠

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 50多种适合机器学习和预测应用的API,你的选择是?(2018年版本)

    对于做工程项目和搞科研的人来说,有现成的模块或工具使用是一件多么美妙的事情啊,无需访问源码或理解内部工作机制的细节即可完成相应的任务。常用的方法是调用一些API...

    用户3578099
  • 一份帮助你更好地理解深度学习的资源清单

    人工智能和深度学习太火了,火得一塌糊涂,有很多人想从事这个行业。网络上也有很多教程可供大家开始深度学习。如果你完全是一个小白,那么你可以在入行...

    用户3578099
  • DeepFaceLab坑之ffmpeg

    DeepFaceLab是一款支持视频或图片的换脸开源软件,其使用非常简单,有官方的juptyer notebook案例,这里不做过多的教程介绍。

    用户3578099
  • Python处理json总结

    JSON:JavaScript Object Notation 【JavaScript 对象表示法】

    吾非同
  • (23/24) webpack实战技巧:如何在webpack环境中使用Json

    在webpack1或者webpack2版本中,若想在webpack环境中加载Json文件,则需要加载一个json-loader的loader进来的。但是在web...

    wfaceboss
  • 玩转mysql的json类型

    翟凤玺
  • Python是怎样处理json模块的

    JSON:JavaScript Object Notation 【JavaScript 对象表示法】

    砸漏
  • Python 读取 JSON 数据的骚操作

    你想读写 JSON(JavaScript Object Notation) 编码格式的数据。

    Python知识大全
  • Python 读取 JSON 数据的骚操作

    你想读写 JSON(JavaScript Object Notation) 编码格式的数据。

    数据森麟
  • 15.python json模块

    JSON 的全称是 JavaScript Object Notation,即 JavaScript 对象符号,它是一种轻量级、跨平台、跨语言的数据交换格式,其设...

    猿说编程[Python和C]

扫码关注云+社区

领取腾讯云代金券