【问题标题】:get JSON root elements containing inner elements获取包含内部元素的 JSON 根元素
【发布时间】:2018-11-27 12:41:59
【问题描述】:

编辑:它不应该输出“notThis”,因为它没有内部元素。

编辑:这篇文章不是重复的,因为它要求解析内部元素,它只要求解析没有内部元素的元素。

我想将 JSON 数组的根元素放在一个单独的数组中。因此,我还想解析它的内部元素的名称,并将它们放入一个包含内部元素数组的数组中。

请看下面的例子:

[
  {
    "firstRoot": {
      "firstInner1": "test",
      "secondInner1": "test"
    }
  },
  {
    "secondRoot": {
      "firstInner2": "test",
      "secondInner2": "test"
    }
  },
  {
    "thirdRoot": {
      "firstInner3": "test",
      "secondInner3": "test"
    }
  }, {"notThis" : "test"}
]

期望的输出: 包含所有根元素名称的数组:

["firstRoot", "secondRoot", "thirdRoot"]

一些带有内部元素的数组:

[["firstInner1","secondInner1"],["firstInner2","secondInner2"],["firstInner3","secondInner3"]]

所以没有“notThis”元素,因为它没有内部元素。

【问题讨论】:

  • 你会如何使用for 循环?
  • 我目前对Python有基本的了解。我知道如何创建一个字典,以及如何访问某些元素。但是,我不知道如何在不进行硬编码的情况下找到根元素。因此,我将其发布在堆栈溢出上。
  • 这个问题的不同之处在于它还要求解析内部元素名称。

标签: python arrays json data-structures


【解决方案1】:

这样的?可能不是最佳解决方案。

#Load JSON
json_str = '[{"firstRoot":{"firstInner1":"test","secondInner1":"test"}},{"secondRoot":{"firstInner2":"test","secondInner2":"test"}},{"thirdRoot":{"firstInner3":"test","secondInner3":"test"}}]'
dic = json.loads(json_str)

#Output arrays
root_ele = []
inner_ele = []

#Parse JSON
for i in dic:
    root_ele.append(list(i.keys())[0])
    y = [k for j in list(i.values()) for k, l in j.items()]
    inner_ele.append(y)

#Print output
print(root_ele)
print(inner_ele)

输出:

['firstRoot', 'secondRoot', 'thirdRoot']
[['firstInner1', 'secondInner1'], ['firstInner2', 'secondInner2'], ['firstInner3', 'secondInner3']]

【讨论】:

    【解决方案2】:

    我会在 json 条目上映射一个 lambda:

    json_dict = {...}
    list(map(lambda j: list(j.keys())[0], json_dict))
    # ['firstRoot', 'secondRoot', 'thirdRoot']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-13
      • 2018-05-18
      • 2020-04-21
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      相关资源
      最近更新 更多