首页 > 解决方案 > 将文本列表转成 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"
         }
      ]
   ]
]

标签: pythonjsonlist

解决方案


使用递归函数将文件内容拆分为块并使用分而治之

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'}]]

推荐阅读