python向json文件中追加内容

我们常常会遇到这样的json文件:

[{"id": 4, "text": "LOC", "background_color": "#7c20e0", "text_color": "#ffffff"}, 
  {"id": 5, "text": "MISC", "background_color": "#fbb028", "text_color": "#000000"}, 
  {"id": 6, "text": "ORG", "background_color": "#e6d176", "text_color": "#000000"}, 
  {"id": 7, "text": "PER", "background_color": "#6a74b9", "text_color": "#ffffff"},
  {"id": 10, "text": "DATE", "background_color": "#7c20e0", "text_color": "#ffffff"}, 
  {"id": 10, "text": "DATE", "background_color": "#7c20e0", "text_color": "#ffffff"}]

可以看出文件的开头和结尾是“[”,“]”,这种文件中的每一行(一个记录)都是一个字典(dict),然后把所有的字典对象添加至列表中(list)。那么,我们如何来追加内容呢?

方法:
(1)先创建一个列表
(2)将当前json文件中已有的内容读入(append)列表中。
(3)将新增的内容以字典形式添加至列表中。
(4)使用json.dump()将该列表写回原文件。

python实现:

def write_json(obj):
    '''
    写入/追加json文件
    :param obj:
    :return:
    '''

    #首先读取已有的json文件中的内容
    item_list = []
    with open('labels.json', 'r') as f:
        load_dict = json.load(f)
        num_item = len(load_dict)
        for i in range(num_item):
            id = load_dict[i]['id']
            text = load_dict[i]['text']

            background_color = load_dict[i]['background_color']
            text_color = load_dict[i]['text_color']
            item_dict = {'id':id, 'text':text,'background_color':background_color, 'text_color':text_color}
            item_list.append(item_dict)
    #读取已有内容完毕
    #将新传入的dict对象追加至list中
    item_list.append(obj)
    #将追加的内容与原有内容写回(覆盖)原文件
    with open('labels.json', 'w', encoding='utf-8') as f2:
        json.dump(item_list, f2, ensure_ascii=False)



#obj字典对象为新增内容
obj = {"id": 10,"text": "DATE","background_color": "#7c20e0","text_color": "#ffffff"}
write_json(obj)

参考:https://blog.csdn.net/broccoli2/article/details/103325434

热门文章

暂无图片
编程学习 ·

react-native 使用react-native-image-crop-picker上传图片、视频到服务端

博主主要卡在了上传数据这一步情景是这样的:每一次只允许选择一张图片,每次从相册中选择一图片点击右上角确定后,立即发送请求,上传该图片,并且下次再点击时,重复这个动作。(1)点击下图的上传资料(2)点击红框内的按钮(3)选择图片(4)选择完毕的同时,上传图片到服…
暂无图片
编程学习 ·

STM32开放式开发环境:释放创造力

市场上涌现各种价格亲民的经济型微控制器,助力新一代开发者创造令人兴奋的新型嵌入式应用。如今的开发工具非常好用,软硬件均呈现模块化趋势,插接安装简单容易,使得产品设计评估和原型开发周期大幅缩短。STM32开放式开发环境是业内独一无二的软硬件开发平台,堆叠式插接电路…
暂无图片
编程学习 ·

利用BootStrap创建搜索框--」详解

今天学了bootstrap由于官网上没有搜索框,我要做一个网站正好需要,我就自己做了一个搜索框,话不多说直接上代码下面是jsp代码<div class="col-sm-5" id="so"><div class="input-group"><input type="text" class="…
暂无图片
编程学习 ·

lex yacc flex bison

简介 lex与yacc是两个在Unix下的分别作词法分析和语法分析的工具, Linux对应flex与bison。 Yacc 与 Lex 快速入门 flex 和bison的安装和使用 Windows下安装lex(flex)与yacc(bison)
暂无图片
编程学习 ·

使用go语言寻找最长不含有重复字符的字串,统计数量

go语言Map例题(寻找最长不含有重复字符的字串 )要求 a := abcdabc 那么得出统计说是4,实现下方代码 解题思路lastOccurred[x]不存在,或者无需操作 lastOccurred[x] >= start -> 更新start 更新lastOccurred[x],更新maxLengthfunc lengthOfNonRepeatingSubstr(s strin…
暂无图片
编程学习 ·

shell(1)

diff -b 忽略空格 -B 忽略空行 -i 忽略大小写 -c 显示文件所有内容并标不同 -r 对比输出 -u 合并输出 patch patch 源文件 布丁文件 -b 备份原文件 cut 检测apache服务器被谁访问的次数最多,显示访问者ip并显示访问次数 cat /etc/httpd/logs/access_log | cut…
暂无图片
编程学习 ·

JS基础知识总结(十三):ES6 对象的扩展

“ 关注 前端开发社区 ,回复"1"即可加入 前端技术交流群,回复 "2"即可免费领取 500G前端干货!上一节主要是总结了ES6中和数组有关的内容。本节主要总结ES6中对象的扩展,具体内容包括以下几个方面: 会介绍以下内容: [外链图片转存失败,源站可能有防盗…
暂无图片
编程学习 ·

Docker 进阶篇(一)镜像加速器,镜像管理,私有镜像仓库

Docker 进阶篇(一)镜像加速器,镜像管理,私有镜像仓库为Docker 设置存储空间配置镜像加速器镜像管理使用离线镜像搜索镜像通过容器创建对象将本地镜像推送到公网Docker 镜像仓库中创建Docker Register 私有仓库 为Docker 设置存储空间 在使用Docker的时候,经常会遇到Docker…
暂无图片
编程学习 ·

windows使用小技巧——Windows 10 HEVC扩展要收费怎么办?教你怎么免费下载HEVC扩展

平时我一般都使用potplayer打开视频,但在整理视频的时候mov格式的文件总是不能显示缩略图。如果用windows10自带图片查看器打开时会提示下载HEVC,点击后会要求付7元下载。本来已经准备支付宝了,结果发现要将支付宝账号加入windows账号下。。。算了算了,还是看看有没有别的办…
暂无图片
编程学习 ·

mysql(二)复制与同步

mysql(二)复制与同步 文章目录mysql(二)复制与同步mysql的主从复制基于GTID的主从复制 + 半同步几种常用复制半同步mysql组复制(全同步复制)节点 身份node1(172.25.136.1) masternode2(172.25.136.2) slavenode3(172.25.136.3) slavemysql的主从复制 node1 2下载所…
暂无图片
编程学习 ·

Codeforces 1342 E Placing Rooks —— 第二类斯特林数

This way 题意: 现在有一个n*n的棋盘,n个棋子,你要放置这些棋子使得他们满足以下条件: 每个格子都能被某个棋子打到 共有k对棋子能够打到对方 如果一个格子所处的这一行或这一列有一个棋子,那么这个格子就能被打到。两个棋子处在同一行或同一列并且它们之间没有别的棋子,…
暂无图片
编程学习 ·

JetPack 之 Paging3.0 简单上手指南!

作者:Chsmy之前有一篇Paging2.x的使用和分析,Paging2.x运行起来的效果无限滑动还挺不错的,不过代码写起来有点麻烦,功能也不是太完善,比如下拉刷新的方法都没有提供,我们还得自己去调用DataSource#invalidate()方法重置数据来实现。最近google出了3.0的测试版,功能更加强…
暂无图片
编程学习 ·

String类

String类的subString方法从指定位置截取到字符串结尾 substring (int beginIndex) :返回一个子字符串,从beginIndex开始截取字符串到字符串结尾。 eg:str1.subString(5)//从第6个位置开始截取截取指定范围的内容 substring (int beginIndex, int endIndex) :返回一个子字符…
暂无图片
编程学习 ·

JavaScript之组合式继承

继承的概念 面向对象的三大特征:封装,继承,多态 封装: 将复杂的操作包裹起来,进行隐藏,简单化,安全化 继承: 拿来主义,自己没有,把别人的拿过来,让其成为自己的 JavaScript中有两种继承模型: 1.原型式继承 2.组合式继承 组合式继承就是将其他对象中的成员添加到自己…
暂无图片
编程学习 ·

学术论文写作漫谈

超星尔雅学术论文写作漫谈章节测验答案1.1 高校学生学术论文写作现状1【单选题】根据调研结果显示,目前高校大一学生在论文写作方面的主要困难不包括()。 答案:不知写多少字A、不知如何选题B、不知如何查资料C、不知写多少字D、不知学术规范标准2【单选题】根据调研,学生认为写…
暂无图片
编程学习 ·

css样式添加方法

行内添加样式 原句p标签内添加样式内嵌样式 head标签内加入style标签特点:针对于所有的p标签,都能使用这个样式 外部样式表的一个链接样式 在站点文件夹,新建名为css子文件夹,在里面创建一个样式表文件。新建文件保存成后缀css的文件,里面填入基本样式。网页文件在head标签…