2022年 11月 5日

python处理json文件操作

目录

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文件的例子

  1. # -*- coding: utf-8 -*-
  2. # author:Mr Luo
  3. # datetime:2021/4/30 10:36
  4. import json
  5. dict = {
  6.     "name":"孙悟空",
  7.     "age":502,
  8.     "skill":"fly",
  9.     "name":"猪八戒",
  10.     "age": 507,
  11.     "skill": "fly"
  12. }
  13. # 定义变量
  14. jsontext = {'person':[]}
  15. # 为变量赋值,
  16. for key,value in dict.items():
  17.     # print(key)
  18.     jsontext['person'].append(value)
  19. # dumps() 将字典格式数据转换成json格式;
  20. jsondata = json.dumps(jsontext)
  21. with open('jsondata.json',"a+") as js:
  22.     js.write(jsondata)
  23. # 读取json文件内容,返回字典格式
  24. with open('./jsondata.json','r',encoding='utf8') as fp1:
  25.     # loads() :将json字符串转换成字典格式
  26.     json_data = json.load(fp1)
  27.     print('json数据:',json_data)
  28.     for key, value in json_data.items():
  29.         print(key, ":", value)

注意问题

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