【问题标题】:Comparison of JSON file key valuesJSON文件键值对比
【发布时间】:2022-01-03 08:12:06
【问题描述】:

有两个带有键和值的 JSON 文件。您需要比较两个文件的“key1”,如果值相等,则对两个文件的“key 2”的值进行比较

file1.json

[
    {
        "key1": "KARA",
        "key2": "10"
    }
][
    {
        "key1": "SARA",
        "key2": "23"
    }
]

file2.json

{
    "code": 200,
    "data": [
        {
            "key1": "CRACK",
            "key2": "12"
        }
    ]
}{
    "code": 200,
    "data": [
        {
            "key1": "KARA",
            "key2": "13"
        }
    ]
}

即如果key 1的值(file1.json)==key1的值(file2.json),就会执行:(file1.json)key2的值-(value2.json) key2 的值 (10 - 13)

输出到终端:-3

如何做到这一点?

我试过了

with open('file1.json') as f, open('file2.json') as f2:
    json1 = json.load(f)
    json2 = json.load(f2)
if json1[0]['key1'] == json2['data'][0]['key1']:
    print(int(json1[0]['key2']) - int(json2['data'][0]['key2'])) # -3

如果文件中有 1 个对象,它可以工作,但不适用于我所询问的场景。

【问题讨论】:

    标签: python json


    【解决方案1】:

    您需要遍历列表:

    with open('file1.json') as f, open('file2.json') as f2:
        json1 = json.load(f)
        json2 = json.load(f2)
    for d1 in json1: 
        for d2 in json2: 
            if d1[0]['key1'] == d2['data'][0]['key1']: 
                print(int(d1[0]['key2']) - int(d2['data'][0]['key2']))
    

    输出:

    -3
    

    【讨论】:

      【解决方案2】:

      file1.json和file2.json一样是无效的JSON,它应该是顶层的对象或数组,例如:

      # JSON 1
      [
          {
              "key1": "KARA",
              "key2": "10"
          }, {
              "key1": "SARA",
              "key2": "23"
          }
      ]
      
      # JSON 2
      [{
          "code": 200,
          "data": [
              {
                  "key1": "CRACK",
                  "key2": "12"
              }
          ]
      }, {
          "code": 200,
          "data": [
              {
                  "key1": "KARA",
                  "key2": "13"
              }
          ]
      }]
      

      然后有很多问题要问和处理:

      • len(json1) == len(json2)

      然后你想做这样的事情:

      with open('file1.json') as f, open('file2.json') as f2:
          json1 = json.load(f)
          json2 = json.load(f2)
      
      json1_dict = {}
      for json_obj in json1:
          json1_dict[json_obj['key1']] = int(json_obj['key2'])
      
      json2_dict = {}
      for json_obj in json2:
          json2_dict[json_obj['data'][0]['key1']] = int(json_obj['data'][0]['key2'])
      
      for key in json1_dict:
          if key in json2_dict:
              print(f"diff: {json1_dict[key] - json2_dict[key]}")
      

      【讨论】:

        猜你喜欢
        • 2013-10-15
        • 1970-01-01
        • 2020-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-11
        • 2020-04-26
        • 1970-01-01
        相关资源
        最近更新 更多