给出平面数据阵列的结构



我有一些棘手的数据要处理。基本上,我想将结构放在一个扁平的列表中。

用简单的英语制作:

  1. "level":1标签是数组的关键
  2. "level":2或更高标签应嵌套在数组中
  3. 如果没有"level":1,请将其添加到通用NoLevel1列表
  4. 它应该将tags组合在一起if它们具有相同的"level":1

我的数据看起来像这样:

[{
  "title": "Set 1",
  "tag": [{
    "name": "Animals",
    "level": 1
  },
  { "name": "Cat",
    "level": 2
  },
  { "name": "Dog",
    "level": 3
  }
]
},
{
  "title": "Set 2",
  "tag": [{
    "name": "Fruits",
    "level": 1
  },
  { "name": "Apple",
    "level": 2
  }]
},
{
  "title": "Set 3",
  "tag": [{
    "name": "Fruits",
    "level": 1
  },
  { "name": "Orange",
    "level": 3
  }]
},
{
  "title": "Set 4",
  "tag": [{
    "name": "Cars",
    "level": 2
  }]
},
{
  "title": "Set 5",
  "tag": [{
    "name": "Random!",
    "level": 3
  }]
}]

我所需的输出是:

[{
  "name": "Animals",
  "level":1,
  "tag_child": [{
    "name": "Cat",
    "level": 2
  },
  { "name": "Dog",
    "level": 3
  }]
},
  {
  "name": "Fruits",
  "level":1,
  "tag_child": [{
    "name": "Apple",
    "level": 2
  },
  { "name": "Orange",
    "level": 3
  }]
},
  {
  "name": "NoLevel1",
  "level":1,
  "tag_child": [{
    "name": "Cars",
    "level": 2
  },
  { "name": "Random!",
    "level": 3
  }]
}]

我已经加载了数据,但在提供数据的结构方面还没有进一步。

import json
with open("Test.json") as json_file:
    l = json_data = json.load(json_file)
for i in thedata:
    if i['tag']['level'] > 1:

我没有测试过,但是类似的东西应该起作用。如果不是您要寻找的话,请自己进行更改。但这肯定应该让您开始。

import json
with open("Test.json") as json_file:
    json_data = json.load(json_file)
    generic = []
    result = []
for i in json_data:
    if any(d['level'] == 1 for d in i['tag']):
        tag_data = {}
        tag_child = []
        for tag in i['tag']:
            if tag['level'] == 1:
                tag_data['name'] = tag['name']
                tag_data['level'] = 1
            else:
                tag_child.append(tag)
        filtered = {tuple((k, d[k]) for k in sorted(d) if k in ['name']): d for d in tag_child}
        tag_data['tag_child'] = list(filtered.values())
        if any(d['name'] == tag_data['name']  for d in result):
            for t in result:
                if t['name'] == tag_data['name']:
                    t['tag_child'] = t['tag_child'] + tag_child
            filtered = {tuple((k, d[k]) for k in sorted(d) if k in ['name']): d for d in t['tag_child']}
            t['tag_child'] = list(filtered.values())
        else:
            result.append(tag_data)
    else:
        for tag in i['tag']:
            generic.append(tag)
tag_data = {}
tag_data['name'] = 'NoLevel1'
tag_data['level'] = 1
tag_data['tag_child'] = generic
result.append(tag_data)
print(json.dumps(result))

最新更新