【问题标题】:How to convert list of items into json parent-child hierarchy?如何将项目列表转换为 json 父子层次结构?
【发布时间】:2019-10-08 13:48:49
【问题描述】:

我在一个带有点的列表中有一些项目,子点和子子点需要将它们全部传递到父子层次结构中的json中。

我尝试将每个点都列出来,如果一个点由点组成,子或子子点都在一个点列表中。

我的列表如下所示:

lst=["1. content","(a) content","(b) ","(i)","(ii"),"(c)","2.","3.","(A)","(B)","4."]
for ptags in soup.findAll('p'):
                lst.append(ptags.get_text())

    regex = r"^\([a-z]\)\s.*"
    regex1=r"^\([\D]+\)\s.*"
    j=0
    sub = []
    for i in lst:
        if sub:
            match = re.match(regex, i)
            match1=re.match(regex1,i)
            if match:
                sub.append(i)
            elif match1:
                sub.append(i)
            else:
                j=j+1
                sub = [i]
            Notes[str(j)] = sub
        else:
            if sub:
                Notes[str(j)] = sub
            sub = [i]
            Notes[str(j)] = i

I need the json hierarchy as output in this way :
"1. content",
       "(a) content",
       "(b) ",
             "(i)",
             "(ii"),
       "(c)",
"2.",
"3.",
    "(A)",
    "(B)",

"4."

######################################JSON STRUCTURE
[
  {
    "1. content": [
      "(a) content",
      {
        "(b) ": [
          "(i)",
          "(ii)"
        ]
      },
      "(c)"
    ]
  },
  "2.",
  {
    "3.": [
      "(A)",
      "(B)"
    ]
  },
  "4."
]

【问题讨论】:

  • 除非您创建一个具有属性(= 您的子点)的类并将该类的实例解析为 json,否则我认为您将不得不编写自己的 list 到 json 的方法解释 - 仅基于在上面的给定列表中,除了“数字是主要对象”和“数字之间是不同样式的子项和子项”之外,您没有给出任何结构。对于 json 解析,您需要某种 python 也可以识别并且不是基于理论的结构。

标签: python json python-3.x text-processing


【解决方案1】:

如果您想拥有类似的层次结构,您应该将您的数据更改为dict。因为您没有在代码中包含足够的信息,所以我只是添加了您的数据应该是什么样子的示例:

from json import dumps
lst = [{"1. content": ["(a) content", {"(b) ": ["(i)","(ii)"]},"(c)"]},"2.",{"3.": ["(A)","(B)"]},"4."]

每个层次结构级别都应该是一个字典。对于没有子元素的元素,您可以将它们作为简单的列表元素传递。

您现在可以使用dumps 获取您的 json 字符串:

dumps(lst)

【讨论】:

  • 是的,我确实需要结构中的输出,我已将所有内容都传递到列表中。我不知道如何区分它们并作为层次结构
  • 您能否将生成列表的代码添加到您的问题中?
  • ``` for ptags in soup.findAll('p'): lst.append(ptags.get_text()) ``` 这是生成我的列表的代码。我创建了 ptags 将其传递给列表,这都是兄弟姐妹,没有层次结构
  • 我无法理解,p 标签你想分层显示的是兄弟姐妹,你的数据中没有分层?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2022-07-15
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 2022-09-27
相关资源
最近更新 更多