Как преобразовать список элементов в иерархию JSON parent-child? - PullRequest
0 голосов
/ 22 мая 2019

У меня есть несколько элементов в списке с точками, подпунктами и подпунктами, которые необходимо передать все из них в 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."
]

1 Ответ

0 голосов
/ 22 мая 2019

Если вы хотите иметь подобную иерархию, вы должны изменить свои данные на dict. Поскольку вы не включили достаточно информации в свой код, я просто добавляю пример того, как должны выглядеть ваши данные:

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

Каждый уровень иерархии должен быть словарем. Для элементов, которые не имеют дочерних элементов, вы можете передать их как простой элемент списка.

Вы можете получить строку json, используя dumps сейчас:

dumps(lst)
...