【问题标题】:Merging 2 json files into new json with no duplicates将 2 个 json 文件合并到没有重复的新 json 中
【发布时间】:2021-03-11 07:22:56
【问题描述】:

我的专用服务器正在生成 2 个 laptime 数组,我想使用脚本将它们合并到一个新的 json 文件中,删除重复的“steamids”(并保持分组在一起)并且两个数组都在一个记录时间{}(这样我就可以将它提供给一个生成单圈时间和排行榜的 html 脚本)。换句话说,我希望结构保持不变。 first laptime filesecond laptime file 执行以下命令

jq 'reduce . as $item ({}; . * $item)' laptimes_data_ams.json laptimes_data_kow.json > laptimes.json

然后生成(糟糕的)merged laptime file。 我可以减少文件,但不能再进一步了。我在这里检查了其他人的线程,每当我尝试他们的建议时,脚本就会拒绝工作。任何人都可以帮我生成一个工作脚本以在合并后保持这个最终结构?

{
"loggedTimes" : {
    steamids" : {
        "idnumber1" : "name1",
        "idnumber2" : "name2"
    },
    "vehicles" : {
        "vehiclenumber1" : {
            "laptimes" : {
                "idnumber1" : {
                    "lapTime" : time1,
                    "logtime" : log1,
                    "name" : "name 1",
                    "rank" : rank1,
                    "refId" : id1,
                    "vehicleid" : vehiclenumber1,
                    "wet" : 0
                },
                "idnumber2" : {
                    "lapTime" : time2,
                    "logtime" : log2,
                    "name" : "name 2",
                    "rank" : rank2,
                    "refId" : id2,
                    "vehicleid" : vehiclenumber1,
                    "wet" : 0                
                }
            }
        }
        "vehiclesnumber2" : {
        //you get the idea by now
        }
    }
}

【问题讨论】:

  • 为了将来的参考,请遵循minimal reproducible example 指南——强调minimal。这样,您还可以更轻松地显示预期结果。

标签: arrays json merge jq


【解决方案1】:

您尚未指定如何执行合并,但一种选择是让第二个文件中的键值对占主导地位。在这种情况下,你可以写:

jq -n '
  input as $one
  | input as $two
  | ($one + $two)
  | .loggedTimes.steamids = ($one.loggedTimes.steamids + $two.loggedTimes.steamids)
'  1.json 2.json

根据您的输入,这会产生以下内容的输出:

{
  "loggedTimes": {
    "steamids": {
      "76561197960277005": "[DECOCO]koker_SZ",
      "76561197960436395": "JOJO",
      ...
    },
    "vehicles": {
      "-1142039519": {
        "lapTimes": {}
      },
      "-1201605905": {
        "lapTimes": {
          "76561197984026143": {
            "lapTime": 609101,
            "logtime": 1606516985,
            "name": "Night Dick",
            "rank": 1,
            "refId": 36032,
            "vehicleId": -1201605905,
            "wet": 0
          }
        }
      }
     ...
    }
  }
}

【讨论】:

  • 我的错。是的,我想保留 steamids 密钥。基本上我希望保留当前的结构,因此 steamids 保留在自己的组中,但会进行重复检查,并且车辆会被分组(那里不会有重复项)。我设法将 steamid 重新组合并删除了重复项,但我仍在努力在 steamid 之后添加车辆{}。{}。关于如何进行的任何提示?
  • 你绝对的传奇!我只需要添加 | .loggedTimes.vehicles = ($one.loggedTimes.vehicles + $two.loggedTimes.vehicles) 在后面重新组合单圈时间和 bam。有用。非常非常感谢峰。你可以看看你帮助创建的over here
猜你喜欢
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-05
  • 1970-01-01
  • 1970-01-01
  • 2020-10-16
相关资源
最近更新 更多