如何读取和写入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.对象
    对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

    2.数组
    数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

    值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。

    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 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标准只允许一个顶级值”?

    物联沃分享整理
    物联沃-IOTWORD物联网 » 如何读取和写入Json文件

    发表评论