python生成json_生成动态嵌套JSON对象和数组-python - python
正如问题所解释的那样,我一直在尝试生成嵌套的JSON对象。在这种情况下,我有for循环从字典dic中获取数据。下面是代码:
f = open("test_json.txt", 'w')
flag = False
temp = ""
start = "{\n\t\"filename\"" + " : \"" +initial_filename+"\",\n\t\"data\"" +" : " +" [\n"
end = "\n\t]" +"\n}"
f.write(start)
for i, (key,value) in enumerate(dic.iteritems()):
f.write("{\n\t\"keyword\":"+"\""+str(key)+"\""+",\n")
f.write("\"term_freq\":"+str(len(value))+",\n")
f.write("\"lists\":[\n\t")
for item in value:
f.write("{\n")
f.write("\t\t\"occurance\" :"+str(item)+"\n")
#Check last object
if value.index(item)+1 == len(value):
f.write("}\n"
f.write("]\n")
else:
f.write("},") # close occurrence object
# Check last item in dic
if i == len(dic)-1:
flag = True
if(flag):
f.write("}")
else:
f.write("},") #close lists object
flag = False
#check for flag
f.write("]") #close lists array
f.write("}")
预期输出为:
{
"filename": "abc.pdf",
"data": [{
"keyword": "irritation",
"term_freq": 5,
"lists": [{
"occurance": 1
}, {
"occurance": 1
}, {
"occurance": 1
}, {
"occurance": 1
}, {
"occurance": 2
}]
}, {
"keyword": "bomber",
"lists": [{
"occurance": 1
}, {
"occurance": 1
}, {
"occurance": 1
}, {
"occurance": 1
}, {
"occurance": 2
}],
"term_freq": 5
}]
}
但是目前我得到如下输出:
{
"filename": "abc.pdf",
"data": [{
"keyword": "irritation",
"term_freq": 5,
"lists": [{
"occurance": 1
}, {
"occurance": 1
}, {
"occurance": 1
}, {
"occurance": 1
}, {
"occurance": 2
},] // Here lies the problem "," before array(last element)
}, {
"keyword": "bomber",
"lists": [{
"occurance": 1
}, {
"occurance": 1
}, {
"occurance": 1
}, {
"occurance": 1
}, {
"occurance": 2
},], // Here lies the problem "," before array(last element)
"term_freq": 5
}]
}
请帮助,我正在尝试解决它,但是失败了。请不要将其标记为重复,因为我已经检查了其他答案并且完全没有帮助。
编辑1:
输入基本上是从映射类型为dic的字典中获取的
例如:“刺激” => [1、3、5、7、8]
其中刺激是关键,并映射到页码列表。
这基本上是在外部for循环中读取的,其中key是关键字,value是该关键字出现的页面列表。
编辑2:
dic = collections.defaultdict(list) # declaring the variable dictionary
dic[key].append(value) # inserting the values - useless to tell here
for key in dic:
# Here dic[x] represents list - each value of x
print key,":",dic[x],"\n" #prints the data in dictionary
参考方案
@andrea -f对我来说看起来不错,这是另一种解决方案:
随意选择两者:)
import json
dic = {
"bomber": [1, 2, 3, 4, 5],
"irritation": [1, 3, 5, 7, 8]
}
filename = "abc.pdf"
json_dict = {}
data = []
for k, v in dic.iteritems():
tmp_dict = {}
tmp_dict["keyword"] = k
tmp_dict["term_freq"] = len(v)
tmp_dict["lists"] = [{"occurrance": i} for i in v]
data.append(tmp_dict)
json_dict["filename"] = filename
json_dict["data"] = data
with open("abc.json", "w") as outfile:
json.dump(json_dict, outfile, indent=4, sort_keys=True)
同样的想法,我首先创建一个大的json_dict以直接保存在json中。我使用with语句保存json以避免捕获exception
另外,如果将来需要改进json.dumps()输出,则应该查看json的文档。
编辑
而且只是为了好玩,如果您不喜欢tmp var,则可以单行处理所有数据for循环:)
json_dict["data"] = [{"keyword": k, "term_freq": len(v), "lists": [{"occurrance": i} for i in v]} for k, v in dic.iteritems()]
它可以为最终解决方案提供一些不完全可读的内容,例如:
import json
json_dict = {
"filename": "abc.pdf",
"data": [{
"keyword": k,
"term_freq": len(v),
"lists": [{"occurrance": i} for i in v]
} for k, v in dic.iteritems()]
}
with open("abc.json", "w") as outfile:
json.dump(json_dict, outfile, indent=4, sort_keys=True)
编辑2
看来您不想将json保存为所需的输出,但还是想读取它。
实际上,您也可以使用json.dumps()来打印json。
with open('abc.json', 'r') as handle:
new_json_dict = json.load(handle)
print json.dumps(json_dict, indent=4, sort_keys=True)
但是,这里仍然存在一个问题,因为列表中"filename":的d在data之前,所以f会打印在列表的末尾。
要强制命令,您将必须在字典的生成中使用OrderedDict。请注意,python 2.X的语法很丑(imo)
这是新的完整解决方案;)
import json
from collections import OrderedDict
dic = {
'bomber': [1, 2, 3, 4, 5],
'irritation': [1, 3, 5, 7, 8]
}
json_dict = OrderedDict([
('filename', 'abc.pdf'),
('data', [ OrderedDict([
('keyword', k),
('term_freq', len(v)),
('lists', [{'occurrance': i} for i in v])
]) for k, v in dic.iteritems()])
])
with open('abc.json', 'w') as outfile:
json.dump(json_dict, outfile)
# Now to read the orderer json file
with open('abc.json', 'r') as handle:
new_json_dict = json.load(handle, object_pairs_hook=OrderedDict)
print json.dumps(json_dict, indent=4)
将输出:
{
"filename": "abc.pdf",
"data": [
{
"keyword": "bomber",
"term_freq": 5,
"lists": [
{
"occurrance": 1
},
{
"occurrance": 2
},
{
"occurrance": 3
},
{
"occurrance": 4
},
{
"occurrance": 5
}
]
},
{
"keyword": "irritation",
"term_freq": 5,
"lists": [
{
"occurrance": 1
},
{
"occurrance": 3
},
{
"occurrance": 5
},
{
"occurrance": 7
},
{
"occurrance": 8
}
]
}
]
}
但是要小心,在大多数情况下,最好保存常规的.json文件以使它们成为跨语言的。
Python uuid4,如何限制唯一字符的长度 - python
在Python中,我正在使用uuid4()方法创建唯一的字符集。但是我找不到将其限制为10或8个字符的方法。有什么办法吗?uuid4()ffc69c1b-9d87-4c19-8dac-c09ca857e3fc谢谢。 参考方案 尝试:x = uuid4() str(x)[:8] 输出:"ffc69c1b" Is there a way to…json.dumps弄乱顺序 - python
我正在使用json module创建一个包含类似条目的json文件json.dumps({"fields": { "name": "%s", "city": "%s", "status": "%s", "cou…JSON SCHEMA PATTERN逗号分隔列表 - python
我的json模式中具有以下模式,并且我需要根据以下模式包含逗号分隔的值。当前模式只能像DV2一样处理一种模式所以我应该如何修改我的模式以包括多个字符串,如下所示,但它应该与声明的模式匹配。例如:“ DV2”,“ DEV1”,“ DEV3”,“ ST”, "ENVIRONMENT": { "type": "st…Python中的Json操作 - python
Latest_json和Historic_json函数返回:return(frame.to_json(orient='records')) 主功能:recentdata = recent_json(station) historicdata = historic_json(station) alldata = historicdata +…Python-crontab模块 - python
我正在尝试在Linux OS(CentOS 7)上使用Python-crontab模块我的配置文件如下:{ "ossConfigurationData": { "work1": [ { "cronInterval": "0 0 0 1 1 ?", "attribute&…
python生成json_生成动态嵌套JSON对象和数组-python - python相关推荐
- FastAPI上传POST嵌套JSON对象及List列表BaseModel,python
FastAPI上传POST嵌套JSON对象及List列表BaseModel,python from typing import Optional, Union, Listimport uvicorn ...
- php json输出对象的属性值,JavaScript_jquery动态遍历Json对象的属性和值的方法,1、遍历 json 对象的属性/ - phpStudy...
jquery动态遍历Json对象的属性和值的方法 1.遍历 json 对象的属性 //定义json对象 var person= { name: 'zhangsan', pass: '123', fn: ...
- Flutter Json对象和数组解析成实体类
1.解析json对象: 准备一个json 对象数据: String json="{"res": true, "age": 12, "Name ...
- DataTable转Json对象或数组
DataSet转Json DataSet.Table[0]先转为json字符串,然后再由字符串转为Json对象或数组 DataSet转json字符串 using Newtonsoft.Json;/// ...
- python读取多行json_如何在Python中读取包含多个JSON对象的JSON文件?
所以这是在python中读取JSON文件的标准方法 import json from pprint import pprint with open('ig001.json') as data_file ...
- python jsonpath-rw_Python使用jsonpath-rw模块处理Json对象操作示例
本文实例讲述了Python使用jsonpath-rw模块处理Json对象操作.分享给大家供大家参考,具体如下: 这两天在写一个爬虫,需要从网站返回的json数据提取一些有用的数据. 向url发起请求, ...
- python jsonpath set value_Python学习:json对象快速访问(续)
问题 我们再次回到jsonpath的问题,起初使用jsonpath-ng实现快速访问json对象节点.但jsonpath-ng的性能问题,导致这个方法实在是糟糕,无法使用,悲剧的是已经写了很多代码,再 ...
- java json 嵌套解析_我们如何解析Java中的嵌套JSON对象?
该JSON是一种轻量级的,基于文本和语言无关的数据交换格式.JSON可以表示两种结构化类型,如对象和数组.甲JSONArray可以从一个字符串解析文本以产生向量样的对象.我们可以使用JSONArray ...
- java复杂map转json_转换复杂的JSON对象为 Map对象
packagecom.test;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.Iterator;importjav ...
最新文章
- 清华姚班2019级新生来了:高考状元、奥赛金牌,也是一批被AI感召的00后
- 解析OpenShift的存储规划
- 深度学习目标检测网络个人总结
- Linux性能优化方向及相关工具
- 《网络攻防》第五周作业
- IT餐馆—第三回 模式
- 2019,跟着大佬追逐技术前沿
- 发现一款牛逼的 IDEA 插件:检测代码漏洞,一键修复!
- mysql MHA集群安装
- 基于C++实现的一种通用Base编解码器(Hex(Base16)/Base32/Base64)
- Python图像的手绘效果
- “TikTok+独立站”模式熟了?看Anker如何玩转社交私域流量导流独立站?
- 计算机软件水平考试什么题型,计算机软考考什么内容
- Word/Excel 固定表格大小,填写内容时,表格不随单元格内容变化
- PCIe系列第四讲、TLP的路由方式
- Bayes决策理论(一):最小错误率和最小风险决策
- Artificial Intelligence Computer Vision ML and DL
- ORA-02195:尝试创建的PERMANENT对象在TEMPORARY表空间中
- IDEA java出现无效的源发行版14解决方案
- 微信小程序实现录音格式为mp3,并上传到云开发环境
热门文章
- 51Nod--1100-斜率最大
- __bridge,__bridge_retained,__bridge_transfer
- unity hub服务器无响应_累积更新KB4541335反馈称无法安装 出现无响应情况
- android 相册 uri空,Android---相册getContentResolver().query结果为空指针
- linux 选择文件指定的行数据类型,06练习题
- controller调用controller的方法_SpringCloud(5):Feign整合Ribbon和Hystrix来进行远程调用与服务熔断...
- java正确的代码_对文件名为Test.java的java代码描述正确的是()
- php编译称opcode文件,PHP源码保护和性能加速
- python dataframe删除重复行_详解pandas使用drop_duplicates去除DataFrame重复项参数
- linux远程虚拟桌面,2020-07-23 Linux 远程连接虚拟桌面