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格式的字符串形式,以便后续使用。
一、demjson的简介
python处理json是需要第三方json库来支持,工作中遇到处理json数据,是没有安装第三方的json库。demjson模块提供用于编码或解码用的类和函数,以语言中立的JSON格式表示(在Ajax Web应用程序中,它通常用作XML的更简单的替代品)。为了实现试图尽可能符合JSON规范(RFC 4627),同时仍然提供许多可选扩展,以允许限制较少的JavaScript语法。它包括完整的Unicode支持,包括UTF-32、BOM和代理对处理。它还可以支持JavaScript的NaN和Infinity数字类型以及它的“未定义”类型。它还包括一个类似lint的JSON语法验证器,该验证器测试JSON文本是否严格遵守标准。
二、demjson的安装
pip install demjson
三、demjson 的常用的两个方法, 一个是 encode, 一个是 decode
1、encode
Python encode() 函数用于将 Python 对象编码成 JSON 字符串。
语法
demjson.encode(self, obj, nest_level=0)
实例
以下实例将数组编码为 JSON 格式数据:
import demjsondata = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]json = demjson.encode(data)print json
以上代码执行结果为:
[{"a":1,"b":2,"c":3,"d":4,"e":5}]
2、decode
#!/usr/bin/pythonimport demjsonjson = '{"a":1,"b":2,"c":3,"d":4,"e":5}';text = demjson.decode(json)print text
以上代码执行结果为:
{u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}
四、demjson解析不规范的json字符串
# -*- coding: utf-8 -*-import json# javascript中的对象js_json = "{x:1, y:2, z:3}"# python打印出来的字典py_json1 = "{'x':1, 'y':2, 'z':3}"# 解析不规则的json会报错json.loads(js_json)json.loads(py_json1)# ValueError: Expecting property name: line 1 column 2 (char 1)# 解析规则的jsonpy_json2 = '{"x":1, "y":2, "z":3}'data = json.loads(py_json2)print(data)# {'y': 2, 'x': 1, 'z': 3}
python的json模块只能解析规则的json字符串,即字典的key要用双引号, 没有双引号或者使用单引号都不能正常解析 虽然打印出来的字段带有单引号,但json中不使用单引号
# -*- coding: utf-8 -*-import demjsonjs_json = "{x:1, y:2, z:3}"py_json1 = "{'x':1, 'y':2, 'z':3}"py_json2 = '{"x":1, "y":2, "z":3}'data = demjson.decode(js_json)print(data)# {'y': 2, 'x': 1, 'z': 3}data = demjson.decode(py_json1)print(data)# {'y': 2, 'x': 1, 'z': 3}data = demjson.decode(py_json2)print(data)# {'y': 2, 'x': 1, 'z': 3}