会涉及的json内容点:
存取JSON文件
json和python对象转换
JSON的“引号”
中文编码
json 会被忽视的参数
和字典的关系
常见报错
如果你要处理的是文件而不是字符串,你可以使用 json.dump() 和 json.load() 来编码和解码JSON数据。例如:
存取JSON文件
# 写入 JSON 数据
with open('data.json', 'w') as f:
json.dump(data, f)
# 读取数据(读取json文件,从json文件中读取内容存入python对象,不再用loads而是要用load:)
with open('data.json', 'r') as f:
data = json.load(f)
文件读取代码(可跳过,不影响)
def init():
f = open('E:\\CALLgood\\law.txt', 'r', encoding='utf8')
law = {}
lawname = {}
line = f.readline()
# json.loads(text,encoding='utf8') 报Unexpected UTF-8 BOM (decode using utf-8-sig)错误,下面两行 去掉text包含BOM字符
if line.startswith(u'\ufeff'):
line = line.encode('utf8')[3:].decode('utf8')
while line:
# law被一条一条的写入,长度会变化
#不理解的是law 和lawname一样呀,只是1.键值对位置互换 2.代表位置的相差1
#第一次read 第一行 line 184 lawname ={"0":184} law={"184":0}
lawname[len(law)] = line.strip()
law[line.strip()] = len(law)
line = f.readline()
f.close()
f = open('E:\\CALLgood\\accu.txt', 'r', encoding='utf8')
accu = {}
accuname = {}
line = f.readline()
while line:
# 第一次read 第一行 line 184 accuname ={"0":妨害公务} accu={"184":0}
accuname[len(accu)] = line.strip()
accu[line.strip()] = len(accu)
line = f.readline() #接着读
f.close()
print(law,accu)
return law, accu, lawname, accuname
在这里pthon对象与json转换,注意中文编码问题。
json.dumps(): 对数据进行编码。
json.loads(): 对数据进行解码。
代码块三,注意数据的类型转换
import json
def init():
import json
f = open('E:\Mypython3\train.json', 'r', encoding='utf8')
line = f.readline()
if line.startswith(u'\ufeff'):
line = line.encode('utf8')[3:].decode('utf8')
###############json文件用txt读入
#原始第一行
print("json文件读入json字符串:",line)
a = json.loads(line)
print(type(a))
print("loads将 JSON 对象转换为 Python 字典:",a)
b =json.dumps(a)
print(type(b))
print("dumps将Python对象,编码为JSON对象:",b)
print(json.dumps(a,ensure_ascii=False))
<class 'str'>
json文件读入json字符串: {
"fact": "昌宁县人民检察院指控,2014年4月19日下午16时许,被告人段某驾拖车经过鸡飞乡澡塘街子,时逢堵车,段某将车停在“冰凉一夏”冷饮店门口,被害人王某的侄子王2某示意段某靠边未果,后上前敲打车门让段某离开,段某遂驾车离开,但对此心生怨愤。同年4月21日22时许,被告人段某酒后与其妻子王1某一起准备回家,走到鸡飞乡澡塘街富达通讯手机店门口时停下,段某进入手机店内对被害人王某进行吼骂,紧接着从手机店出来拿得一个石头又冲进手机店内朝王某头部打去,致王某右额部粉碎性骨折、右眼眶骨骨折。经鉴定,被害人王某此次损伤程度为轻伤一级。", "meta": {
"relevant_articles": [234], "accusation": ["故意伤害"], "punish_of_money": 0, "criminals": ["段某"], "term_of_imprisonment": {
"death_penalty": false, "imprisonment": 12, "life_imprisonment": false}}}
<class 'dict'>
loads将 JSON 对象转换为 Python 字典: {
'fact': '昌宁县人民检察院指控,2014年4月19日下午16时许,被告人段某驾拖车经过鸡飞乡澡塘街子,时逢堵车,段某将车停在“冰凉一夏”冷饮店门口,被害人王某的侄子王2某示意段某靠边未果,后上前敲打车门让段某离开,段某遂驾车离开,但对此心生怨愤。同年4月21日22时许,被告人段某酒后与其妻子王1某一起准备回家,走到鸡飞乡澡塘街富达通讯手机店门口时停下,段某进入手机店内对被害人王某进行吼骂,紧接着从手机店出来拿得一个石头又冲进手机店内朝王某头部打去,致王某右额部粉碎性骨折、右眼眶骨骨折。经鉴定,被害人王某此次损伤程度为轻伤一级。', 'meta': {
'punish_of_money': 0, 'term_of_imprisonment': {
'death_penalty': False, 'imprisonment': 12, 'life_imprisonment': False}, 'relevant_articles': [234]