【问题标题】:Add "value" information to flare JSON data using Python使用 Python 向 JSON 数据添加“值”信息
【发布时间】:2020-08-23 08:39:33
【问题描述】:

我有一些 JSON D3 格式的数据(特别是flare.json)。看起来是这样的,

json_data = {
   "name":"root",
   "children":[
      {
         "name":"435",
         "children":[
            {
               "name":"188",
               "children":[
                  {
                     "name":"198"
                  }
               ]
            },
            {
               "name":"436",
               "children":[
                  {
                     "name":"86"
                  },
                  {
                     "name":"115"
                  },
                  {
                     "name":"437"
                  }
               ]
            }

(等等)。数据有 n 个级别。我有另一个嵌套列表,其中包含 some 的“值”字段,但不是所有 json_data“名称”字段。例如,

[['198',50],['86',12],[...]]

我想在适用的情况下将相应的“值”数据添加到 json_data。所以,最终的结果应该是这样的,

json_data_updates = {
   "name":"root",
   "children":[
      {
         "name":"435",
         "children":[
            {
               "name":"188",
               "children":[
                  {
                     "name":"198", "value":50
                  }
               ]
            },
            {
               "name":"436",
               "children":[
                  {
                     "name":"86","value":12
                  },
                  {
                     "name":"115"
                  },
                  {
                     "name":"437"
                  }
               ]
            }

我可以使用this 来获取 json_data 中的所有名称值作为列表

[root, 435, 188, 198, ...]

但我不确定如何将 json_data 更新为我想要的格式。

【问题讨论】:

  • 但我不确定如何将 json_data 更新为我想要的格式。您能否更具体地说明问题是什么?请参阅How to Askhelp center

标签: python json


【解决方案1】:

递归查找名称没有多大帮助,因为您需要再次查找它们以设置value。相反,修改递归函数以在找到时设置value

#!/usr/bin/env python3

import json
import sys

json_data = {
   "name":"root",
   "children":[
      {
         "name":"435",
         "children":[
            {
               "name":"188",
               "children":[
                  {
                     "name":"198"
                  }
               ]
            },
            {
               "name":"436",
               "children":[
                  {
                     "name":"86"
                  },
                  {
                     "name":"115"
                  },
                  {
                     "name":"437"
                  }
               ]
            }
        ]
    }
]
}

values = [['198',50],['86',12]]

d = dict(values)

def set_names(root):
    try:
        value = d[root['name']]
    except KeyError:
        pass
    else:
        root['value'] = value

    for child in root.get('children', []):
        set_names(child)

set_names(json_data)
json.dump(json_data, sys.stdout)

输出:

{
  "name": "root",
  "children": [
    {
      "name": "435",
      "children": [
        {
          "name": "188",
          "children": [
            {
              "name": "198",
              "value": 50
            }
          ]
        },
        {
          "name": "436",
          "children": [
            {
              "name": "86",
              "value": 12
            },
            {
              "name": "115"
            },
            {
              "name": "437"
            }
          ]
        }
      ]
    }
  ]
}

【讨论】:

  • 哇,谢谢。这比我做的要简单得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-27
  • 2012-12-22
  • 1970-01-01
相关资源
最近更新 更多