python的json模块中dumps和loads、dump和load以及报错JSONDecode:Expecting property name enclosed in double quotes:

python的json模块中dumps和loads、dump和load

import json
data = {1:'a', 2:'b', 3:'c'}		# 数据
1. dumps和loads

注意: dumps和loads不仅仅对字典起作用

  • dumps(), 将python对象转换为josn字符串

    res1 = json.dumps(data)
    print(res1, type(res1))
    
    {"1": "a", "2": "b", "3": "c"} <class 'str'>
    
    PythonJson
    dictobject
    list, tuplearray
    str, unicodestring
    int, long, floatnumber
    Truetrue
    Falsefalse
    Nonenull
  • loads(), 将josn字符串转换为python对象

    res2 = json.loads(res1)
    print(res2, type(res2))
    
    {'1': 'a', '2': 'b', '3': 'c'} <class 'dict'>
    
    JsonPython
    objectdict
    arraylist
    stringunicode
    number(int)int, long
    number(real)float
    trueTrue
    falseFalse
    nullNone
2. dump和load

注意: dumps和loads是作用在python对象josn字符串上的, 而dump和load是作用在json文件上的

  • dump, 将数据以json的格式保存至文件

    with open('file', 'w') as f:
        json.dump(data, f)
    
  • load, 读取json文件

    with open('file', 'r') as f:
        res3 = json.load(f)
        print(res3, type(res3))
    
    {'1': 'a', '2': 'b', '3': 'c'} <class 'dict'>
    

分析: 此处数据data为python字典, 使用json保存并读取后亦为字典; 若数据为python字符串对象使用dump保存, 则使用load读取后亦为字符串(可进一步通过loads将字符串转换为python对象)。

with open('file', 'w') as f:
    json.dump(res1, f)
    
with open('file', 'r') as f:
    res3 = json.load(f)
    print(res3, type(res3))
    print('*'*50)
    res4 = json.loads(res3)
    print(res4, type(res4))
{"1": "a", "2": "b", "3": "c"} <class 'str'>
**************************************************
{'1': 'a', '2': 'b', '3': 'c'} <class 'dict'>

彩蛋

细心的同学可能发现, 在使用dumps(),将python对象转换为josn字符串后, 原本数据datakeyint类型变成了字符串类型。注意json字符串python字符串的区别, 如以下报错:

str1 = '{1:"a", 2:"b", 3:"c"}'
print(str1, type(str1))
res5 = json.loads(str1)
print(res5, type(res5))
{1:"a", 2:"b", 3:"c"} <class 'str'>
.......
JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

还需要注意的一点是, json字符串的内部为双引号(""), 否则也会报以上错误

在这里插入图片描述

因此, 构建json字符串时需要特别注意, 正确构建方式如下:

str1 = '{"1":"a", "2":"b", "3":"c"}'
print(str1, type(str1))
res5 = json.loads(str1)
print(res5, type(res5))
{"1":"a", "2":"b", "3":"c"} <class 'str'>
{'1': 'a', '2': 'b', '3': 'c'} <class 'dict'>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值