每天努力一点点,坚持下去 ------ 博客首页

python- json

一、概念

  • json是一种通用的数据类型,任何语言都认识
  • 接口返回的数据类型都是json
  • 定义时必须使用双引号 “ ”,不可以是单引号‘ ’
  • 长得像字典,不是字典,形式也是k-v { }
  • 其实json是字符串
  • 字符串不能用key、value来取值,要先转成字典才可以
  • 格式如下:
{
        "error_code": 0,#要使用双引号,如果是单引号则运行时会报错,可以上网做在线json格式校验
        "stu_info": [
                {
                        "id": 309,
                        "name": "小白",
                        "sex": "",
                        "age": 28,
                        "addr": "河南省济源市北海大道32号",
                        "grade": "天蝎座",
                        "phone": "18512572946",
                        "gold": 100
                },
                {
                        "id": 310,
                        "name": "小白",
                        "sex": "",
                        "age": 28,
                        "addr": "河南省济源市北海大道32号",
                        "grade": "天蝎座",
                        "phone": "18516572946",
                        "gold": 100
                }
        ]
}

二、json操作

1、json串转成字典:

(1).loads()方法——json转成字典

import json#引用json模块
res=json.loads(s)
print(res)#打印字典
print(type(res))#打印res类型
print(res.keys())#打印字典的所有Key
  • 要先读文件,然后再转换:
f=open('stus.json',encoding='utf-8')
content=f.read()#使用loads()方法,需要先读文件
user_dic=json.loads(content)
print(user_dic)

(2).load()方法——把文件里面的内容转成字典

import json
f=open('stus.json',encoding='utf-8')
user_dic=json.load(f)
print(user_dic)

(3)区别

  • loads()传的是字符串,而load()传的是文件对象
  • 使用loads()时需要先读文件再使用,而load()则不用

2、字典转成json串:

  • 文件里只能写字符串,但可以把字典转成json串,json串是字符串,可以存到文件里

(1).dumps()方法——字典转换成Json

stus={'xiaojun':'123456','xiaohei':'7891','abc':'11111'}
res2=json.dumps(stus)
print(res2)#打印字符串
print(type(res2))#打印res2类型
  • .dumps()方法:把字典转成json串
with open('stus.txt','w',encoding='utf-8' as f:#打开文件
    f.write(res2)#在文件里写入转成的json串
  • 使用.dumps()方法前,要先打开文件,再写入:
stus={'xiaojun':'123456','xiaohei':'7890','lrx':'111111'}
res2=json.dumps(stus,indent=8,ensure_ascii=False)
# 加上indent,会自动的加上缩进
#加上ensure_ascii=False,中文会正常显示,要不然直接打印显示会是Unicode,存到数据库还是中文
print(res2)
with open('stus.json','w',encoding='utf-8') as f:#使用.dumps()方法时,要写入【文件名使用.json,Pycharm就可以识别出是json,显示的格式会好看些】
    f.write(res2)

(2)dump()方法

stus={'xiaojun':'123456','xiaohei':'7890','lrx':'111111'}
f=open('stus2.json','w',encoding='utf-8')
json.dump(stus,f,indent=4,ensure_ascii=False) 
#第一个参数是【主要转换的对象·变量】
#第二个参数是打开文件时的参数:f
def op_file(file_name,content=None):
    if content:
        with open(FILENAME,'w',encoding='utf-8') as fw:
            json.dump(content,fw,ensure_ascii=False,indent=4)#先传入content,在传入fw,才会可以正常

(3)区别

  • .dump()不需要使用.write()方法,只需要写哪个字典、哪个文件即可;而.dumps()需要使用.write()方法写入

  • 如果要把字典写到文件里面的时候,dump()好用;但如果不需要操作文件,或需要把内容存到数据库和Excel,则需要使用dumps()先把字典转成字符串,再写入

  • dumps()直接可以把字符串、字典转换成 json,适合于转入数据库、redis使用

  • dump()——dump(字典dic,文件对象file),自动的会把dic写入到file,不需要在write(),适用于把json串写入文件

(4)dump\dumps参数

  • .dumps\dump中使用参数indent,为字符串换行+缩进:
res2=json.dumps(stus.indent=4)
print(res2)#打印字符串
#结果为: 
'''
{
    "xiaojun": "123456",
    "xiaohei": "7891",
    "lrx": "hailong",
    "tanailing": "111111"
}
'''
  • .dumps\dump中使用参数ensure_ascii,为内容输出为中文:
res2=json.dumps(stus,indent=4,ensure_ascii=False)#为False时内容输出显示正常的中文,而不是转码
print(res2)

3、不管是dump还是load,带s的都是和字符串相关的,不带s的都是和文件相关的。

        * 验证json格式是否不对,可以是使用网址:bejson.com


 

1、pycharm使用小技巧之分屏:

在python文件上右键——Split Vertically,即可达到分屏效果:

 

2、pycharm使用小技巧之颜色渲染:

文件为.json结尾时,输出的内容会有染色渲染:

with open('stus.json','w',encoding='utf-8' as f:#打开文件

字典的方式怎么样可以直接转换成json写入文件:

def write_file(product):
    with open(FILE_NAME,'a+',encoding='utf-8')as fw:
        json.dump(product,fw,ensure_ascii=False,indent=4)
d={'水杯': {'price': 89, 'colour': '黑色', 'count': 18}}
write_file(d)

任何付出都是值得的,会越来越好......

posted @ 2019-09-14 21:32  他还在坚持嘛  阅读(289)  评论(0编辑  收藏  举报