Json
在換行符分隔的 JSON 文件中將類型從字元串轉換為整數,處理 null
我們有以下以換行符分隔的 JSON:
{"leagueId": "1", "name": "the ballers"} {"team": "2", "leagueId": "1", "name": "the hoopers"} {"team": "3", "leagueId": "1", "name": "the gamerrs"} {"team": "4", "leagueId": "1", "name": "the drivers"} {"team": "5", "leagueId": "1", "name": "the jumpers"} {"team": "6", "leagueId": "1", "name": "the riserss"}
team,leagueId都應該是整數,我們想修改這個 NDJSON,將這些字元串轉換為整數。我們要的輸出是:
{"leagueId": 1, "name": "the ballers"} {"team": 2, "leagueId": 1, "name": "the hoopers"} {"team": 3, "leagueId": 1, "name": "the gamerrs"} {"team": 4, "leagueId": 1, "name": "the drivers"} {"team": 5, "leagueId": 1, "name": "the jumpers"} {"team": 6, "leagueId": 1, "name": "the riserss"}
假設我們知道/有一個需要從字元串轉換為整數的列的列表/數組
$$ team, leagueId $$,我們如何進行這種轉換?這可能與(a)使用類似工具的bash命令
jq
,或者(b)有一些python解決方案嗎?我們完整的 NDJSON 大小約為 10GB,性能很重要,因為這是我們日常數據攝取管道中的一個步驟。 編輯: 如果不是因為第一個 JSON 中的缺失值,jq -c '{leagueId: .leagueId | tonumber, team: .team | tonumber, name: .name}' tmp/testNDJSON.json > tmp/new_output.json
這似乎會起作用……感謝任何幫助!team
jq -c '.leagueId |= tonumber | (.team // empty) |= tonumber' file
這會將
leagueId
每個對象的 in 轉換為一個數字,然後轉換為team
值(如果它存在且非空)。泛化為將一組鍵轉換為數字(如果存在):
jq -c --argjson keys '["team", "leagueId"]' \ '($keys[] as $key | .[$key] // empty) |= tonumber' file
用於
jo
創建該列表:jq -c --argjson keys "$(jo -a team leagueId)" \ '($keys[] as $key | .[$key] // empty) |= tonumber' file
這裡發生的情況是,該語句
.[$key] // empty
用於一組$key
字元串,從對像生成值,其中$key
是具有非空值的現有鍵。然後將這些值轉換為數字。$key
字元串取自命令行傳入的數組。