python 学习 json 大汇总

会涉及的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]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值