gpt4 book ai didi

json - 在 PowerShell 的 jq 中使用 $ 变量

转载 作者:行者123 更新时间:2023-12-04 18:28:46 26 4
gpt4 key购买 nike

我正在使用此代码:

jq --raw-output "(map(keys) | add | unique) as $cols | map(. as $row | $cols | map($row[.])) as $rows | $cols, $rows[] | @csv" output2.json > output3.csv

从我的 JSON 数据库创建 CSV:

[
{
"key1": "field1",
"key2": "field2",
"key3": "field3"
},
{
"key1": "field4",
"key2": "field5",
"key3": "field6"
}
]

https://jqplay.org/ 上的输出是完美的,但在我的命令行上运行时似乎根本不起作用。我在 VSCode 中使用 PowerShell。

我不断收到此错误。

jq: error: syntax error, unexpected '|', expecting '$' or '[' or '{' (Windows cmd shell quoting issues?) at , line 1: (map(keys) | add | unique) as  | map(. as  |  | map([.])) as  | , [] | @csvjq: 1 compile error

我猜想 $ 是问题所在,因为它们没有显示在错误文本中,所以我尝试以各种方式转义它们,但没有任何进展。我进行了广泛的搜索,似乎没有人有这个问题,所以我一定是得到了一些非常简单非常错误的东西。

最佳答案

你的 jq 脚本:

  • 必须作为 文字 PowerShell 字符串 ('...')
  • 传递
  • 因为 一个 内插 PowerShell 字符串 ("...") 在设计上将带有 $ 前缀的标记解释为 PowerShell 变量引用;例如,$cols(或 PowerShell subexpressions ($(...)),在这种情况下不适用):<
jq -r '(map(keys) | add | unique) as $cols | 
map(. as $row | $cols | map($row[.])) as $rows |
$cols, $rows[] | @csv' output2.json > output3.csv

* 为了便于阅读,我添加了换行符。 PowerShell 字符串文字可以跨越多行,因此您应该能够按原样粘贴多行命令。当然,您可以将其格式化为单行。
* -r 确保结果是“原始”输出,即没有 JSON 值转义。
* 如果您将 jq 脚本保存到 file 以与 -f 选项一起使用,请务必将其保存为 UTF-8 < em>没有 BOM.


下面是一个演示差异的简化示例:

# OK: SINGLE-quoted jq script:
PS> '{ "foo": "bar" }' | jq '. as $cols | .foo'
"bar"

# BROKEN: DOUBLE-quoted jq script: PowerShell expands `$cols` up front,
# resulting in an empty string, if no such PowerShell variable exists.
# jq then effectively sees '. as | .foo', which explains the syntax error.
PS> '{ "foo": "bar" }' | jq ". as $cols | .foo"
jq: error: syntax error, unexpected '|', expecting '$' or '[' or '{' (Unix shell quoting issues?) at <top-level>, line 1:
. as | .foo
jq: 1 compile error

关于json - 在 PowerShell 的 jq 中使用 $ 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45579569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com