目录

JSON文件基本介绍

JSON的规则

python读取json文件的方式

使用json文件的例子

注意问题


JSON文件基本介绍


        JSON:一种与开发语言无关的、轻量级的数据存储格式,全称JavaScript Object Notation,一种数据格式的标准规范,起初来源于JavaScript这门语言,后来随着使用的广泛,几乎每门开发语言都有处理JSON的API。优点:易于人的阅读和编写,易于程序解析与生产。JSON样例:首先一个花括号{},整个代表一个对象,同时里面是一种Key-Value的存储形式,它还有不同的数据类型来区分


JSON的规则


对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’对”之间使用“,”(逗号)分隔。规则如下:
       1)映射用冒号(“:”)表示。名称:值
       2)并列的数据之间用逗号(“,”)分隔。名称1:值1,名称2:值2
       3) 映射的集合(对象)用大括号(“{}”)表示。{名称1:值1,名称2:值2}
       4) 并列数据的集合(数组)用方括号(“[]”)表示。
         [
           {名称1:值,名称2:值2},
           {名称1:值,名称2:值2}
         ]
      5  元素值可具有的类型:string, number, object, array, true, false, null 
        JSON 用冒号(而不是等号)来赋值。每一条赋值语句用逗号分开。整个对象用大括号封装起来。可用大括号分级嵌套数据。对象描述中存储的数据可以是字符串,数字或者布尔值。对象描述也可存储函数,那就是对象的方法。


{
    "name":"孙悟空",
    "age":502,
    "skill":"fly"
}

python读取json文件的方式


JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。json的文件格式:使用大括号来区分表示并存储数据; python操作json文件通过了两种方法:
load():用于读取json文件;
dump():用于写入json文件

# 读取json文件内容,返回字典格式
with open('./path_file/info.json','r',encoding='utf8') as fp:
    json_data = json.load(fp)
    print('这是文件中的json数据:',json_data)
    print('这是读取到文件数据的数据类型:', type(json_data))


# 将字典数据写入到json文件中
dict1 = {'name': '孙悟空', 'age': 502, 'skill': 'fly'}
with open('./path_file/info.json','a',encoding='utf8')as fp:
    json.dump(dict1,fp,ensure_ascii=False)  
#  如果ensure_ascii ' '为false,则返回值可以包含非ascii值
python除了提供json文件的操作还提供了对于json格式转换的方法;loads() :将json字符串转换成字典格式;dumps() 将字典格式数据转换成json格式;


# 将json字符串转换成字典格式
str1 = '{"name": "孙悟空", "age": 502, "skill": "fly"}'print('这是转换后的数据:',json.loads(str1))
print('这是转换后的数据类型:',type(json.loads(str1)))


# 将字典格式数据转换成json格式
dict1 = {'name': '孙悟空', 'age': 502, 'skill': 'fly'}
print('这是将字典转换之后的数据:',json.dumps(dict1,ensure_ascii=False))
print('这是将字典转换之后的数据类型:',type(json.dumps(dict1,ensure_ascii=False))) #  如果ensure_ascii ' '为false,则返回值可以包含非ascii值


使用json文件的例子

# -*- coding: utf-8 -*-
# author:Mr Luo 
# datetime:2021/4/30 10:36
import json

dict = {
    "name":"孙悟空",
    "age":502,
    "skill":"fly",
    "name":"猪八戒",
    "age": 507,
    "skill": "fly"
}

# 定义变量
jsontext = {'person':[]}
# 为变量赋值,
for key,value in dict.items():
    # print(key)
    jsontext['person'].append(value)

# dumps() 将字典格式数据转换成json格式;
jsondata = json.dumps(jsontext)
with open('jsondata.json',"a+") as js:
    js.write(jsondata)

# 读取json文件内容,返回字典格式
with open('./jsondata.json','r',encoding='utf8') as fp1:
    # loads() :将json字符串转换成字典格式
    json_data = json.load(fp1)
    print('json数据:',json_data)
    for key, value in json_data.items():
        print(key, ":", value)

注意问题

注意:json.decoder.JSONDecodeError: Extra data: line 1 column 37 (char 36)
问题原因:json文件中有两条记录,并且json.loads()无法解码多个记录。之前已经生成了一个json文件,再次运行时就会报这样的错误。
解决办法:将要打开的json文件重命名,再运行。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐