将嵌套的json对象转化为json数组(python列表推导式)
需求说明
想将一个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列表推导式)相关推荐
- JSON对象转化为JSON字符串
在进行前端开发的时候,有时我们会遇到要将json对象转化为json字符串,那么该如何进行转化呢??? 我们可以用JSON对象的stringify()和parse()方法. JSON.stringify ...
- python列表推导式中的多层for循环if-else嵌套
一.列表推导式中的if-else: 1.只有一个if [x for x in data if condition] 2.只有一个if-else [exp1 if condition e ...
- Java系列之:ObjectMapper实现对象转化为Json、集合转化为Json、Json转化为对象、Json转化为JsonNode、JsonNode转化为Json字符串
Java系列之:ObjectMapper实现对象转化为Json.集合转化为Json.Json转化为对象.Json转化为JsonNode.JsonNode转化为Json字符串 一.创建类Dataset ...
- Python教程:列表推导式和嵌套的列表推导式讲解
1.列表推导式 列表推导式提供了一个更简单的创建列表的方法.常见的用法是把某种操作应用于序列或可迭代对象的每个元素上,然后使用其结果来创建列表,或者通过满足某些特定条件元素来创建子序列. 例如,假设我 ...
- 解决scala对象转化为json对象为{}
在使用scala中的样例类时,如果要将对象转化为json字符串,需要在每一个属性前面加一个@BeanProperty,这样才能正常输出: 注:如果要在scala环境下用fastjson,一定要用JSO ...
- php对象json,php 把对象转化为json
php中如何把对象转化为json呢? (1)对于普通的php对象 //convert object to array function object_to_array($obj){ if(is_arr ...
- js对象序列化为json字符串
网上找了找将js对象序列化为json字符串的方法.结果都不近人意,最后自己写了一个. 注意你得自己为Date增加toString()方法. function Serialize(obj){switch ...
- 将js对象转化为json对象
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...
- flask中将实例对象转化为json对象
** 由于Flask中没有Django的JsonResponse()方法,所以我们如果要将User.query.all()这样查出来的结果集转化为json对象的时候,就需要自己去实现一个转化为json ...
最新文章
- axios教程01-基本使用流程
- php 单元测试 静态类,可选的PHP类型提示/检查单元测试或静态分析?
- CoreOS集成Kubernetes核心组件Kubelet
- 表的字段中的值需要替换怎么办?【if 函数,case when函数,中间表思路】
- 汉诺塔III HDU - 2064
- CAN 屏蔽器与滤波器(过滤器)
- ORACLE TDE 透明数据加密技术
- BUAA 436 孟竹的复习计划(二维树状数组)
- discuz集思街淘宝客模板
- 香港科技大学TensorFlow速成(1)
- 诺顿误杀事件造成“疑似病毒大爆发”恐慌
- 前端高效开发必备的 js 库大全
- 【学习总结匈牙利算法到KM算法】
- SpringBoot 集成积木报表
- 自用live2d制作
- Visual Studio 2022下载安装及使用教程
- 联想电脑G40无法使用 非要睡眠后才能启用wifi
- Eclipse代码提示和补全
- 依赖注入依赖注入容器
- Linux九阴真经之无影剑残卷2(磁盘存储和文件系统)