python︱处理与使用json格式的数据(json/UltraJSON/Demjson)、pickle模块、yaml模块
python种关于json有很多,simplejson,cjson,还有ujson(详细内容可见:http://blog.csdn.net/gzlaiyonghao/article/details/6567408).
cjson模块只支持string/unicode的key
JSON(JavaScript Object Notation)编码格式的数据。
- 1、变量解码、编码为Json格式
- 2、文件读出、导入json格式
注意:
使用json时需要注意的地方:python中字典的key在经过json转化后都变成了string类型
文章目录
- 1、变量解码、编码为Json格式
- 2、文件读出、导入json格式
- . 3、其他用法
- 4 yaml数据格式的使用
- 延伸一:python3中读保存成中文
- Demjson
- UltraJSON
- pickle模块
- 参考文献:
- 延伸:用json解析网页
- 报错:OverflowError: Maximum recursion level reached
.
1、变量解码、编码为Json格式
来看看py3,.dump的主函数:
json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
ensure_ascii比较关键,True代表显示为编码形式,这个一般在中文里面特别不好用,所以建议关掉。
indent代表缩进,sort_keys代表会否按照某些顺序排列
import jsondata = {'name' : 'ACME','shares' : 100,'price' : 542.23
}json_str = json.dumps(data) # 编码
json_str
'{"price": 542.23, "shares": 100, "name": "ACME"}'
data = json.loads(json_str) # 解码
data
{'name': 'ACME', 'price': 542.23, 'shares': 100}
2、文件读出、导入json格式
# Writing JSON data
with open('data.json', 'w') as f:json.dump(data, f)# Reading data back
with open('data.json', 'r') as f:data = json.load(f)
还有一种导入、导出的写法(限py3):
open("myfile.json", "w", encoding="utf-8" ).write( json_data )
json_data = open("myfile.json", "r", encoding="utf8").read()
.
3、其他用法
(1)分离器,用来分割。
>>> import json
>>> json.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
(2)缩进,更好看。
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{"4": 5,"6": 7
}
(3)与StringIO合用。
>>> import json
>>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
['foo', {'bar': ['baz', None, 1.0, 2]}]
>>> json.loads('"\\"foo\\bar"')
'"foo\x08ar'
>>> from io import StringIO
>>> io = StringIO('["streaming API"]')
>>> json.load(io)
['streaming API']
4 yaml数据格式的使用
参考:Python中yaml数据格式的使用
load()
import yamlyaml_str = """
name: 灰蓝
age: 0
job: Tester
"""with open('user_info.yaml', encoding='utf-8') as file:data = yaml.load(file) # 为列表类型
结果:{‘job’: ‘Tester’, ‘age’: 0, ‘name’: u’\u7070\u84dd’}
dump()
import yamlpython_obj = {"name": u"灰蓝","age": 0,"job": "Tester"}# 内容导出
with open('new_user_info.yaml', mode='w', encoding='utf-8') as file:yaml.dump(python_obj, file)
输出结果:
age: 0
job: Tester
name: "\u7070\u84DD"
延伸一:python3中读保存成中文
发现在py3中保存成.json见很容易变成:"{\"new\": [\"\u5927\u90fd\u4f1a\u827a\u672f\u535a\u7269\u9986\"
我想直接保存成中文。
with open('data.json', 'w') as f:json.dump(json.dump(data,ensure_ascii = False), f)
这段代码中ensure_ascii = False
是可以在py3里面打印出中文,而不是编码形式的。但是保存不了。
需要以下的代码:
open('../../data.json', 'w').write(json.dumps(json_data,ensure_ascii = False))
若依旧出现问题,报错:UnicodeEncodeError: 'gbk' codec can't encode character '\u02c6' in position 54928648: illegal multibyte sequence
,可能还需要加上encoding选项,open('../../data.json', 'w',encoding='utf-8')
读入也可以用:
eval(open('../../data.json', "r").read())
.read()读入为字符串的形式,eval可以把字符串变成原来的格式,也就是{}
网上还有用codecs库,好像也是不行的
import codecs
codecs.open('../../data.json', 'w', "utf-8") as f:json.dump
Demjson
Demjson 是 python 的第三方模块库,可用于编码和解码 JSON 数据,包含了 JSONLint 的格式化及校验功能。
Github 地址:https://github.com/dmeranda/demjson
官方地址:http://deron.meranda.us/python/demjson/
- encode 将 Python 对象编码成 JSON 字符串
- decode 将已编码的 JSON 字符串解码为 Python 对象
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}]
text = demjson.decode(json)
print (text)
[{'c': 3, 'e': 5, 'b': 2, 'a': 1, 'd': 4}]
.
UltraJSON
https://github.com/esnme/ultrajson
>>> import ujson
>>> ujson.dumps([{"key": "value"}, 81, True])
'[{"key":"value"},81,true]'
>>> ujson.loads("""[{"key": "value"}, 81, true]""")
[{u'key': u'value'}, 81, True]
编码encode_html_chars:
>>> ujson.dumps("<script>John&Doe", encode_html_chars=True)
'"\\u003cscript\\u003eJohn\\u0026Doe"'
ensure_ascii:
将输出限制为ASCII,并将所有扩展字符转义为127以上。默认值为true。如果您的最终格式支持UTF-8设置此选项为false,强烈建议节省空间:
>>> ujson.dumps(u"\xe5\xe4\xf6")
'"\\u00e5\\u00e4\\u00f6"'
>>> ujson.dumps(u"\xe5\xe4\xf6", ensure_ascii=False)
'"\xc3\xa5\xc3\xa4\xc3\xb6"'
escape_forward_slashes:
控制是否正斜杠(/)逃脱了。
>>> ujson.dumps("http://esn.me")
'"http:\/\/esn.me"'
>>> ujson.dumps("http://esn.me", escape_forward_slashes=False)
'"http://esn.me"'
缩进indent:
>>> ujson.dumps({"foo": "bar"})
'{"foo":"bar"}'
>>> ujson.dumps({"foo": "bar"}, indent=4)
{"foo":"bar"
}
pickle模块
import pickle
pickle.dump(output,open('xxx.pkl','wb') )
pickle.load(open('../data/hist_data', 'rb'))
还有使用pandas来直接导出dataframe:
In [34]: import pandas as pd
In [36]: import numpy as np
In [38]: df = pd.DataFrame(np.arange(20).reshape(4,5))In [39]: df
Out[39]:0 1 2 3 4
0 0 1 2 3 4
1 5 6 7 8 9
2 10 11 12 13 14
3 15 16 17 18 19
#使用DataFrame的to_pickle属性就可以生成pickle文件对数据进行永久储存
In [40]: df.to_pickle('foo.pkl')
导入:
In [42]: pd.read_pickle('foo.pkl')
Out[42]:0 1 2 3 4
0 0 1 2 3 4
1 5 6 7 8 9
2 10 11 12 13 14
3 15 16 17 18 19
参考文献:
Python JSON
Using demjson with Python 3
Python:读取和处理json数据
.
延伸:用json解析网页
使用urlopen方法打开网址后, 使用json.load(u)以文件方法来读取.
也可以先u.read().decode(‘utf-8’)读取转为字符串后再传给json.loads(str).
import urllib2,json
u=urllib2.urlopen("http://api.crossref.org/works/10.1021/jm0203783")
json.load(u)
注意, 因为是文件形式, 读取一次后即到底, 不能再次调用json.load(u)获取内容.
使用requests,抓取json数据后, 可以直接使用相应对象的json()方法获得json数据, 也可以使用r.text调用字符串数据传递给json获取.
import json,requests
r=requests.get("http://api.crossref.org/works/10.1021/jm0203783")
r.json()
json.loads(r.text)
报错:OverflowError: Maximum recursion level reached
>>> import ujson
>>> import numpy
>>>
>>> ujson.dumps(numpy.min([1,2]))
Traceback (most recent call last):File "<stdin>", line 1, in <module>
OverflowError: Maximum recursion level reached
出现的报错,那么这里就是数值numpy有问题,需要改成Int即可
python︱处理与使用json格式的数据(json/UltraJSON/Demjson)、pickle模块、yaml模块相关推荐
- QT解析 JSON 格式的数据
QT解析 JSON 格式的数据 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON 采用完全独立于语言的文本格式,这些特性使 JSON 成为理想的数 ...
- 在python中使用json格式存储数据
在python中使用json格式存储数据 代码如下: import jsonlist1 = [{'A': [1, 2, 3, 4, 5, 6], 'B': [3, 4, 5, 6, 7]},{'C': ...
- flex 解析json文件_使用 Python 处理 JSON 格式的数据 | Linux 中国
如果你不希望从头开始创造一种数据格式来存放数据,JSON 是一个很好的选择.如果你对 Python 有所了解,就更加事半功倍了.下面就来介绍一下如何使用 Python 处理 JSON 数据.-- Se ...
- json是什么_如何利用Python处理JSON格式的数据,建议收藏!!!
JSON数据格式在我们的日常工作中经常会接触到,无论是做爬虫开发还是一般的数据分析处理,今天,小编就来分享一下当数据接口是JSON格式时,如何进行数据处理进行详细的介绍,内容分布如下 什么是JSON ...
- Python爬虫 scrapy框架 爬取智联招聘,并把数据存入数据库,存为json格式的数据
First:创建项目:执行下面三句命令: 1. scrapy startproject zhilianzhaopin2. cd zhilianzhaopin3.scrapy genspider zhi ...
- 调用python脚本并传递参数json格式_使用 Python 处理 JSON 格式的数据
如果你不希望从头开始创造一种数据格式来存放数据,JSON 是一个很好的选择.如果你对 Python 有所了解,就更加事半功倍了.下面就来介绍一下如何使用 Python 处理 JSON 数据. JSON ...
- 如何利用Python处理JSON格式的数据,建议收藏!!!
公众号后台回复"图书",了解更多号主新书内容 作者:俊欣 来源:数据分析与篮球 JSON数据格式在我们的日常工作中经常会接触到,无论是做爬虫开发还是一般的数据分析处理,今天,小编就 ...
- django返回json格式的数据的方法
需求问题描述: 在使用ajax时,回调函数需要接受多个参数,查询资料,得知使用json格式的数据比较好(当然也可以使用xml).由于项目使用的是django,这就牵扯到django后端如何传输json ...
- 如何在Django中接收JSON格式的数据
Django做了大量工作简化我们的Web开发工作, 这其中当然也包括接收来自客户端的数据这一普遍需求. 大部分时候,从客户端传入的数据主要是FORM的POST数据,和来自URL的GET数据, 在Dja ...
- java异步请求显示数据格式_JSON(四)——异步请求中前后端使用Json格式的数据进行交互...
json格式的数据广泛应用于异步请求中前后端的数据交互,本文主要介绍几种使用场景和使用方法. 一,json格式字符串 functionsentAjax(){ $.ajax({ type:'POST', ...
最新文章
- 【数据挖掘笔记九】分类:高级方法
- Matlab关键规则挖掘尿片啤酒,电商数据挖掘:“啤酒+尿布”的关联算法规则
- Hadoop的版本介绍
- 房贷利率一涨再涨,为什么排队买房的越来越多?
- 大数据毕设/课设 - 基于大数据的客流量数据可视化平台
- 必看,Mac苹果电脑重装系统教程
- 如何做好软件开发项目的需求分析
- Skype for business 2015 综合部署系列七:配置 Skype 边缘传输服务器
- mysql 事务一直running_事务一直running?记录一次事务异常导致的下单阻塞
- Double Check形式的单例模式
- windows下制作linux U盘启动盘或者安装优盘(转)
- 克罗内克积Kronecker
- 浅析缓冲区溢出漏洞的利用与Shellcode编写
- React从零开始搭建项目
- Unity 生成原始LUT用于外部校色相机不透明物体截图
- 诺基亚的最后机会:没落贵族能否抗衡苹果安卓
- ros之模拟导航算法
- MySQL 导入SCV数据
- SLsec招新题wp
- 西门子SCL读写DB数据