如何使用 JSON 中的值更新我的字典?

How do I update my dictionary with values from JSON?

我想用 json_file 中的值更新我的字典,它是 dict 类型。这是我正在使用的 JSON 字典格式。

  json_file:  {
      "appointmentDeltaEmployee": {
        "SSN": "XXXXXXXX",
        "dutyBasis": "1",
        "normalHours": 80
      },
      "deductionsDeltaEmployee": {
        "unionDuesAnniversaryDay": null,
        "DFASUnionCode": null
      },
      "followUpDeltaEmployee": [
        {
          "noac05followUpCode": null,
          "followUpCode": "S2",
          "followUpDate": "2019-10-01"
        }
      ],
      "laborDetailsDeltaEmployee": [
        {
          "functionalCode": "00",
          "fundControlPointFor1stPosition": "001",
          "cityTaxSatellite": null,
          "fMSFundCode": "012012",
          "primaryLaborCodePercentage": 100,
          "laborDistributionCode": "BBBB",
          "laborcostcenter": "5555"
        }
      ],
      "leaveDetailsDeltaEmployee": {
        "disabledVeteranLeave": "N",
        "leaveGroup": "2",
        "leaveRestriction": "N",
        "eligibleForLeaveNextPayPeriod": "N"
      }
    }

如您所见,有 2 个键具有字典列表。 我需要维护特定的输出顺序,因此我创建了一个包含 None 个值的有序字典。

ordered_keys = ("leaveGroup", "functionalCode", "DFASUnionCode", "normalHours")

order_dic_keys = OrderedDict((k, None) for k in ordered_keys)

如果我打印 order_dic_keys 这就是我得到的

OrderedDict([('leaveGroup', None), ('functionalCode', None), ('DFASUnionCode', None), ('normalHours', None)])

我想使用 for 循环并更新 order_dic_keys 并添加 json_file 中的值。这是我迷路并点击字典列表的地方。

for key in order_dic_keys.keys():
        for key2, values in json_file.items(): # key2 is followUpDeltaEmployee, values is [{u'followUpDate': u'2019-10-01', u'noac05followUpCode': None, u'followUpCode': u'S2'}]
            if key in json_file.items():
                order_dic_keys.update(json_file[values])

我的 order_dic_keys 没有更新。我是否解析列表并创建另一个仅包含键值对的字典?是不是我用了元组来维持顺序,所以无法更新?

无需在数据加载后对其进行处理 - 您可以将自定义函数传递给 json.load / loads,这样可以简化提取:

ordered_keys = ("leaveGroup", "functionalCode", "DFASUnionCode", "normalHours")
order_dic_keys = OrderedDict.fromkeys(ordered_keys)

def extract_data(obj):
    for key, value in obj:
        if key in order_dic_keys:
            order_dic_keys[key] = value

>>> json.loads(data, object_pairs_hook=extract_data)
>>> order_dic_keys
OrderedDict([('leaveGroup', '2'),
             ('functionalCode', '00'),
             ('DFASUnionCode', None),
             ('normalHours', 80)])

完整代码示例:

import json
from   collections import OrderedDict

def extract_data(obj):
    for key, value in obj:
        if key in order_dic_keys:
            order_dic_keys[key] = value
    return dict(obj)

ordered_keys = ("leaveGroup", "functionalCode", "DFASUnionCode", "normalHours")
order_dic_keys = OrderedDict.fromkeys(ordered_keys)

with open("file.json") as f:
    json_file = json.load(f, object_pairs_hook=extract_data)

print(order_dic_keys)