为了账号安全,请及时绑定邮箱和手机立即绑定

我想使用 python 中的特定键值将示例 JSON 数据转换为嵌套 JSON

我想使用 python 中的特定键值将示例 JSON 数据转换为嵌套 JSON

汪汪一只猫 2022-07-19 16:45:13
我有以下 JSON 格式的示例数据:project_cost_details是我查询后的数据库结果集。{    "1": {        "amount": 0,        "breakdown": [            {                "amount": 169857,                "id": 4,                "name": "SampleData",                "parent_id": "1"            }          ],         "id": 1,        "name": "ABC PR"    }}这是完整的 json:https ://jsoneditoronline.org/?id=2ce7ab19af6f420397b07b939674f49c预期输出:https ://jsoneditoronline.org/?id=56a47e6f8e424fe8ac58c5e0732168d7我有这个示例 JSON,它是使用代码中的循环创建的。但我被困在如何将其转换为预期的 JSON 格式。我正在获得顺序更改,需要转换为树状或嵌套 JSON 格式。在 Python 中尝试:project_cost = {}        for cost in project_cost_details:            if cost.get('Parent_Cost_Type_ID'):                project_id = str(cost.get('Project_ID'))                parent_cost_type_id = str(cost.get('Parent_Cost_Type_ID'))                if project_id not in project_cost:                    project_cost[project_id] = {}                if "breakdown" not in project_cost[project_id]:                    project_cost[project_id]["breakdown"] = []                if 'amount' not in project_cost[project_id]:                    project_cost[project_id]['amount'] = 0                project_cost[project_id]['name'] = cost.get('Title')                project_cost[project_id]['id'] = cost.get('Project_ID')                if parent_cost_type_id == cost.get('Cost_Type_ID'):                    project_cost[project_id]['amount'] += int(cost.get('Amount'))                #if parent_cost_type_id is None:                project_cost[project_id]["breakdown"].append(                    {                        'amount': int(cost.get('Amount')),                        'name': cost.get('Name'),                        'parent_id': parent_cost_type_id,                        'id' : cost.get('Cost_Type_ID')                    }                )从这里我得到示例 JSON。如果只输入此代码所需的格式,那就太好了。还尝试了这里提到的这个解决方案:https ://adiyatmubarak.wordpress.com/2015/10/05/group-list-of-dictionary-data-by-particular-key-in-python/
查看完整描述

2 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

我得到了将示例 JSON 转换为预期 JSON 的方法:


data = [

 { "name" : "ABC", "parent":"DEF",  },

 { "name" : "DEF", "parent":"null" },

 { "name" : "new_name", "parent":"ABC" },

 { "name" : "new_name2", "parent":"ABC" },

 { "name" : "Foo", "parent":"DEF"},

 { "name" : "Bar", "parent":"null"},

  { "name" : "Chandani", "parent":"new_name", "relation": "rel", "depth": 3 },

  { "name" : "Chandani333", "parent":"new_name", "relation": "rel", "depth": 3 }

]


result = {x.get("name"):x for x in data}

#print(result)

tree = [];

for a in data:

    #print(a)

    if a.get("parent") in result:

        parent = result[a.get("parent")]

    else:

        parent = "" 

    if parent:

        if "children" not in parent:

            parent["children"] = []

        parent["children"].append(a)


    else:

        tree.append(a)

参考帮助: http: //jsfiddle.net/9FqKS/ 这是我转换为 Python 的 JavaScript 解决方案


查看完整回答
反对 回复 2022-07-19
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

您似乎想从字典中获取值列表。

result = [value for key, value in project_cost_details.items()]


查看完整回答
反对 回复 2022-07-19
  • 2 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信