python - 将文本列表转成 json 格式列表
问题描述
我有一个格式如下的文本文件,每个连字符代表列表项的层次结构。
category1 : 0120391123123
- subcategory : 0120391123123
-- subsubcategory : 019301948109
--- subsubsubcategory : 013904123908
---- subsubsubsubcategory : 019341823908
- subcategory2 : 0934810923801
-- subsubcategory2 : 09341829308123
category2: 1309183912309
- subcategory : 10293182094
...
如何以编程方式将这样的列表转换为如下的 json 格式?
[
{
"category1":"0120391123123"
},
[
{
"subcategory":"0120391123123"
},
[
{
"subsubcategory":"019301948109"
},
[
{
"subsubsubcategory":"013904123908"
},
[
{
"subsubsubsubcategory":"019341823908"
}
]
]
]
],
[
{
"subcategory2":"0934810923801"
},
[
{
"subsubcategory2":"09341829308123"
}
]
],
[
{
"category2":"1309183912309"
},
[
{
"subcategory":"10293182094"
}
]
]
]
解决方案
使用递归函数将文件内容拆分为块并使用分而治之
from pprint import pprint
req=[]
startingindex=-1
with open('temp.txt' ,'r') as f:
content=f.read().split('\n')
def foo(splitcontent):
index=0
reqlist=[]
while(index<len(splitcontent)):
if (splitcontent[index][0]!='-'):
key,value=splitcontent[index].split(':')
reqlist.append({key.strip():value.strip()})
index+=1
templist=[]
while(index<len(splitcontent) and splitcontent[index][0]=='-'):
templist.append(splitcontent[index][1:])
index+=1
intermediatelist=foo(templist)
if(intermediatelist):
reqlist.append(intermediatelist)
return reqlist
pprint(foo(content))
输出
[{'category1': '0120391123123'},
[{'subcategory': '0120391123123'},
[{'subsubcategory': '019301948109'},
[{'subsubsubcategory': '013904123908'},
[{'subsubsubsubcategory': '019341823908'}]]],
{'subcategory2': '0934810923801'},
[{'subsubcategory2': '09341829308123'}]],
{'category2': '1309183912309'},
[{'subcategory': '10293182094'}]]
推荐阅读
- javascript - 如何修复“错误类型错误:data.slice 不是函数”?
- python - 在python中导入网格
- apache-spark - Spark 自定义日志记录
- python-3.x - 为什么我的仪表板应用程序无法正确更新?
- java - 如何使用 Spring-Boot 在 Java 项目中使用 Clojure 库?
- git - 仅显示作为我的提交之一的祖先的提交?
- angular5 - 当 TAB 超出 ag-grid 的最后一个单元格时需要添加新行
- java - 区分“无法为对象分配空间”异常
- python-3.x - 我在 Google 应用引擎上使用 Cloud SQL。在控制台中添加新用户并重新部署我的应用程序后,新用户似乎无法登录?
- ios - iOS PWA 特殊 mailto 链接在 pwa 浏览器中打开选项卡。并停留在空白标签