尝试使用 jq 更新具有可变路径的值
Trying to use jq to update a value with a variable path
我正在尝试将 JSON 路径作为变量传递到 jq 以更新值。这很好用:
jq '.Resources.lc.Properties.UserData."Fn::Base64" = "HHH"' my_data.json
我无法使用这样的任何组合:
KEY='.Resources.lc.Properties.UserData."Fn::Base64"'
jq --arg p "$KEY" '$p = "HHH"' my_data.json
n
jq:错误(在 my_data.json:470):结果为“.Resources.lc.Properties...
的路径表达式无效
谢谢!
你能试试这个吗?
KEY='.Resources.lc.Properties.UserData."Fn::Base64"'
jq "$KEY"' = "HHH"' my_data.json
这里推荐的做法是尽可能将路径作为数组传入,这样就可以使用setpath
:
KEY='["Resources", "lc", "Properties", "UserData", "Fn::Base64"]'
jq --argjson p "$KEY" 'setpath( $p; "HHH")' my_data.json
如果那不可能,下一个最好的办法可能是解析你的 $KEY 字符串
删除内部双引号:
KEY='.Resources.lc.Properties.UserData.Fn::Base64'
jq -n --arg p "$KEY" 'setpath( $p|split(".")[1:]; "HHH")' my_data.json
仅次于最佳的方法是去除内部双引号,
例如在 shell 或使用 jq
KEY='.Resources.lc.Properties.UserData.Fn::Base64'
jq -n --arg p "$KEY" '
setpath( $p|gsub("\"";"")|split(".")[1:]; "HHH")
' my_data.json
我正在尝试将 JSON 路径作为变量传递到 jq 以更新值。这很好用:
jq '.Resources.lc.Properties.UserData."Fn::Base64" = "HHH"' my_data.json
我无法使用这样的任何组合:
KEY='.Resources.lc.Properties.UserData."Fn::Base64"'
jq --arg p "$KEY" '$p = "HHH"' my_data.json
n
jq:错误(在 my_data.json:470):结果为“.Resources.lc.Properties...
的路径表达式无效谢谢!
你能试试这个吗?
KEY='.Resources.lc.Properties.UserData."Fn::Base64"'
jq "$KEY"' = "HHH"' my_data.json
这里推荐的做法是尽可能将路径作为数组传入,这样就可以使用setpath
:
KEY='["Resources", "lc", "Properties", "UserData", "Fn::Base64"]'
jq --argjson p "$KEY" 'setpath( $p; "HHH")' my_data.json
如果那不可能,下一个最好的办法可能是解析你的 $KEY 字符串 删除内部双引号:
KEY='.Resources.lc.Properties.UserData.Fn::Base64'
jq -n --arg p "$KEY" 'setpath( $p|split(".")[1:]; "HHH")' my_data.json
仅次于最佳的方法是去除内部双引号, 例如在 shell 或使用 jq
KEY='.Resources.lc.Properties.UserData.Fn::Base64'
jq -n --arg p "$KEY" '
setpath( $p|gsub("\"";"")|split(".")[1:]; "HHH")
' my_data.json