【Json文件的读取与写入】

Json文件的读取与写入

  • JSON
    • JSON的两种结构
      • JSON中value的格式
    • 读取json文件
    • 写入json文件
    • JSON standard allows only one top-level value

JSON

JSON 全称“JavaScript Object Notation”,译为“JavaScript 对象简谱”或“JavaScript 对象表示法”,是一种轻量级的、基于文本的、开放的数据交换格式。json是基于ECMAScript的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据,用于许多web应用程序来进行数据交换。通俗点来说Json是一种文本格式,常用于数据存储。基本结构为键: 值,键仅可以为字符串,而值可以是字符串,列表,数字,或者另一些键值对。

JSON的两种结构

(1)“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。

(2)值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
JSON具有以下这些形式:
1.对象
对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
【Json文件的读取与写入】_第1张图片
2.数组
数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
【Json文件的读取与写入】_第2张图片
值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
【Json文件的读取与写入】_第3张图片

JSON中value的格式

  • 第一种
    简单值的形式:JSON的简单值的格式对应着JS中的基础数据类型:数字 字符串 布尔值

注意:
JSON中没有undefined
JSON中的字符串必须使用双引号
JSON中是不能用注释的

  • 第二种
    对象形式:对应着JS中的对象
{
	"name":"joy",
	"age":18,
	"hobby":["running","football"]
}

注意事项:
JSON中对象的属性名必须是双引号,属性值如果是字符串也必须是双引号
JSON只要涉及到字符串就必须使用双引号,不支持undefined

  • 第三种
    JSON的数组形式对应着JS中的数组形式
[1,"test",18,null]
[{
	"name":"joy",
	"age":18,
	"hobby":["running","football"]
	},
	{
	"name":"mei",
	"age":28,
	"hobby":["running","football"]
	}
]

读取json文件

json文件:

{“name”:“taoeyhuang”,“age”:18}

import json
 
with open("data.json", 'r') as load_f:
    data=json.load(load_f) # 将读入的json文本转换成Python当中的字典
    print(data) # 返回的是一个字典

json文件:

[{“name”:“taoeyhuang”,“age”:18},{“name”:“ggs”,“age”:18}]

import json
 
with open("data.json", 'r', encoding="utf-8") as load_f:
    data=json.load(load_f)
    print(data) # 返回的是一个列表

写入json文件

    data=[{"geo": "aaaaaa", "road": "512345", "trie": "{123342: {0: {3246: {16869: 0}}, 1: {123: {213: 3}}}}"},
        {"geo": "bbbbbb", "road": "512347", "trie": "{123342: {0: {3246: {16869: 0}}, 1: {123: {231: 3}}}}"}]
    with open("./test.json", "w", encoding="utf-8") as f:
        json.dump(data, f, indent=4, ensure_ascii=False)

obj:即上述第一个参数,用于传入需要写入Json文件当中的数据。
fp:即上述第二个参数,用于传入需要写入Json数据的文本指针
indent:传入Json文件换行缩进量,一般为2或者4。
ensure_ascii:是否允许Ascii码。若为True(默认),则输入的中文全会转化为\uXXXX存储。
写入到文件中:
【Json文件的读取与写入】_第4张图片

JSON standard allows only one top-level value

如果JSON文件写成多个对象并行的话,会报 JSON standard allows only one top-level value的错。
因为 json格式的文件里面要求只能有一个{ },如果要保存多个{},应该将其组合成[{},{}]的格式。
但这种格式的数据也可以使用,一行是一个对象,每次读取一行就是一个对象了。

	list = []
    with open("./test.json", encoding='utf-8') as f:
        for x in range(num): # 读取指定行
            line = f.readline()
            if line == '':
                break
            temp = json.loads(line)
            list.append(temp)

参考博客:
Python读写JSON格式数据
什么“JSON标准只允许一个顶级值”?

你可能感兴趣的:(python,json)