需求说明

想将一个json文件录入MongoDB,如下图所示。

但是原文件是嵌套json对象的形式,如果直接导入MongoDB,会整体变成一个Document:

注:MongoDB中的Document相当于SQL中Row的概念。

而我希望一个Document对应一个式神,即如下图所示的效果。

这就需要将原来的json嵌套对象转为json列表。可以看出,原json中,对象内也包含对象名称的键值对,因此转换过程中无需做什么多余的操作,只要把原先式神名称的键去掉即可,变成如下状态:

实现代码

import json# 读取json文件,存为json嵌套对象
with open('paj_ssl.json', encoding='utf8') as f: paj_ssl_json_obj = json.load(f) # 用列表推导式,提取字典中所有值,转为列表
paj_ssl_json_arr = [paj_ssl_json_obj[key] for key in paj_ssl_json_obj] # 将json列表存入json文件
with open('data2.json', 'w', encoding='utf8') as f:json.dump(paj_ssl_json_arr, f, indent=4, ensure_ascii=False)

解释

json数据结构理解

JSON文件最外层的花括号 {} 表示的是一个对象,而方括号 [] 表示的是一个数组。对象和数组都是JSON中的两种结构。

  • 对象:用花括号 {} 包裹,是一个无序的名称/值对集合。每个名称/值对之间用逗号 , 分隔,名称和值之间用冒号 : 分隔。例如原先的json,实际上形如:
{'Tom':{'name':'Tom','age':11,'hometome':'US'},'Jerry':{'name':'Jerry','age':12,'hometome':'UK'}
}
  • 数组:用方括号 [] 包裹,是一个有序的值集合。每个值之间用逗号 , 分隔。例如转化的目标,实际上形如:
[{'name':'Tom','age':11,'hometown':'US'},{'name':'Jerry','age':12,'hometown':'UK'}
]

语句[obj[key] for key in obj]

(本节解释来源于NewBing)
这段代码是Python中的列表推导式,它的作用是从一个字典中提取所有的值。其中,obj是一个字典,key是字典中的键,obj[key]则是对应键的值。这段代码等价于下面这个for循环:

result = []
for key in obj:result.append(obj[key])

你可以在Python交互式环境中尝试一下:

>>> obj = {'a': 1, 'b': 2, 'c': 3}
>>> [obj[key] for key in obj]
[1, 2, 3]

解决中文乱码问题的两个参数

encoding='utf8:指定编码格式为 UTF-8,这样在序列化时,就可以正确地处理中文字符。
ensure_ascii=False:默认情况下,JSON 序列化时会将非 ASCII 码的字符转义为 ASCII 码,这样会导致中文字符变成 Unicode 码。如果设置为 False,则可以保证输出真正的中文字符。

将嵌套的json对象转化为json数组(python列表推导式)相关推荐

  1. JSON对象转化为JSON字符串

    在进行前端开发的时候,有时我们会遇到要将json对象转化为json字符串,那么该如何进行转化呢??? 我们可以用JSON对象的stringify()和parse()方法. JSON.stringify ...

  2. python列表推导式中的多层for循环if-else嵌套

    一.列表推导式中的if-else: 1.只有一个if     [x for x in data if condition] 2.只有一个if-else     [exp1 if condition e ...

  3. Java系列之:ObjectMapper实现对象转化为Json、集合转化为Json、Json转化为对象、Json转化为JsonNode、JsonNode转化为Json字符串

    Java系列之:ObjectMapper实现对象转化为Json.集合转化为Json.Json转化为对象.Json转化为JsonNode.JsonNode转化为Json字符串 一.创建类Dataset ...

  4. Python教程:列表推导式和嵌套的列表推导式讲解

    1.列表推导式 列表推导式提供了一个更简单的创建列表的方法.常见的用法是把某种操作应用于序列或可迭代对象的每个元素上,然后使用其结果来创建列表,或者通过满足某些特定条件元素来创建子序列. 例如,假设我 ...

  5. 解决scala对象转化为json对象为{}

    在使用scala中的样例类时,如果要将对象转化为json字符串,需要在每一个属性前面加一个@BeanProperty,这样才能正常输出: 注:如果要在scala环境下用fastjson,一定要用JSO ...

  6. php对象json,php 把对象转化为json

    php中如何把对象转化为json呢? (1)对于普通的php对象 //convert object to array function object_to_array($obj){ if(is_arr ...

  7. js对象序列化为json字符串

    网上找了找将js对象序列化为json字符串的方法.结果都不近人意,最后自己写了一个. 注意你得自己为Date增加toString()方法. function Serialize(obj){switch ...

  8. 将js对象转化为json对象

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  9. flask中将实例对象转化为json对象

    ** 由于Flask中没有Django的JsonResponse()方法,所以我们如果要将User.query.all()这样查出来的结果集转化为json对象的时候,就需要自己去实现一个转化为json ...

最新文章

  1. axios教程01-基本使用流程
  2. php 单元测试 静态类,可选的PHP类型提示/检查单元测试或静态分析?
  3. CoreOS集成Kubernetes核心组件Kubelet
  4. 表的字段中的值需要替换怎么办?【if 函数,case when函数,中间表思路】
  5. 汉诺塔III HDU - 2064
  6. CAN 屏蔽器与滤波器(过滤器)
  7. ORACLE TDE 透明数据加密技术
  8. BUAA 436 孟竹的复习计划(二维树状数组)
  9. discuz集思街淘宝客模板
  10. 香港科技大学TensorFlow速成(1)
  11. 诺顿误杀事件造成“疑似病毒大爆发”恐慌
  12. 前端高效开发必备的 js 库大全
  13. 【学习总结匈牙利算法到KM算法】
  14. SpringBoot 集成积木报表
  15. 自用live2d制作
  16. Visual Studio 2022下载安装及使用教程
  17. 联想电脑G40无法使用 非要睡眠后才能启用wifi
  18. Eclipse代码提示和补全
  19. 依赖注入依赖注入容器
  20. Linux九阴真经之无影剑残卷2(磁盘存储和文件系统)

热门文章

  1. 利用Excel函数多角度计算个人所得税
  2. Linux查看系统 CPU 核数
  3. Win10的两个实用技巧系列之切换用户登录、强制关机
  4. js中判断是否是纯数字
  5. Mysql like 用法
  6. PYSearch-iOS快捷搭建搜索功能
  7. dos2unix install on mac_收藏!这份必备免费软件清单,让你的 Mac 更值钱 | 有用功
  8. 数据库笔记-sql执行顺序以及检索优先级
  9. OPPO Reno5和nova8哪个好?多维度对比告诉你真相
  10. HR如何通过数据分析来提升人效?