如何将JSON数据写入文件?
我将JSON数据存储在变量data
。
我想写这个文本文件进行测试,所以我不必每次都从服务器获取数据。
目前,我正在尝试这样做:
obj = open('data.txt', 'wb')
obj.write(data)
obj.close
我正在接收错误:
TypeError: must be string or buffer, not dict
如何解决这个问题?
您忘记了实际的JSON部分 - data
是字典,尚未JSON编码。 这样写:
import json
with open('data.txt', 'w') as outfile:
json.dump(data, outfile)
注意:适用于3.x和2.x。
要获得utf8编码的文件,而不是在Python 2接受的答案中使用ascii编码,请使用:
import io, json
with io.open('data.txt', 'w', encoding='utf-8') as f:
f.write(json.dumps(data, ensure_ascii=False))
Python 3中的代码更简单:
import json
with open('data.txt', 'w') as f:
json.dump(data, f, ensure_ascii=False)
在Windows中, encoding='utf-8'
参数open
仍然是必要的。
为避免在内存中存储数据的编码副本( dumps
结果)并在Python 2和Python 3中输出utf8编码的字节串,请使用:
import json, codecs
with open('data.txt', 'wb') as f:
json.dump(data, codecs.getwriter('utf-8')(f), ensure_ascii=False)
codecs.getwriter
调用在Python 3中是多余的,但是对于Python 2是必需的
可读性和大小:
使用ensure_acsii=False
提供更好的可读性和更小的尺寸:
>>> json.dumps({'price': '€10'})
'{"price": "u20ac10"}'
>>> json.dumps({'price': '€10'}, ensure_ascii=False)
'{"price": "€10"}'
>>> len(json.dumps({'абвгд': 1}))
37
>>> len(json.dumps({'абвгд': 1}, ensure_ascii=False).encode('utf8'))
17
通过向dump
或dumps
参数添加标志indent=4, sort_keys=True
(由dinos66建议),进一步提高可读性。 这样,你将在json文件中得到一个很好的缩进排序结构,代价是稍大的文件大小。
我会用前面提到的答案稍作修改来回答,那就是写一个美化的JSON文件,人眼可以读得更好。 为此,将sort_keys
传递为True
并用4个空格字符indent
,然后您就可以走了。 还要注意确保ascii代码不会写入您的JSON文件中:
with open('data.txt', 'w') as outfile:
json.dump(jsonData, outfile, sort_keys = True, indent = 4,
ensure_ascii = False)
链接地址: http://www.djcxy.com/p/1331.html
上一篇: How do I write JSON data to a file?
下一篇: Posting a File and Associated Data to a RESTful WebService preferably as JSON