c++解析json_使用第三方库demjson解析不规范的json字符串

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

53d71699db2f9b84cacce01dd92bff8b.png

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}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值