我调用了一个curl请求,并以JSON对象数组的形式接收数据。我想使用这个JSON对象数组作为其他JSON中的值。第二个JSON将作为API调用的请求体发送。
从curl请求收到的响应
[
{
id:1,
"term":"term1"
},
{
id:2,
"term":"term2"
},
{
id:3,
"term":"term3"
}
]
我在jq的帮助下构造了新的JSON,并将JSON数组解析为--arg。因此,由于这个原因,数组被解析为字符串,所以我的问题是,我如何在JSON中传递数组,以便它不会获得转义字符,即。不会被解析为字符串。
2条答案
按热度按时间6ojccjat1#
你可以使用jq来转换小的准JSON文本,如图所示,将其视为一个程序,例如:沿着下列路线:
fiei3ece2#
jq通常只能将JSON编码的数据解析为JSON,如果它是有效的JSON。这就是jq从STDIN、输入文件或使用
--argjson
、--jsonargs
、--argfile
或--slurpfile
选项时读取的方式。如果你的输入最初被解释为原始字符串数据(通过使用--raw-input
、--rawfile
、--arg
或--args
选项),你仍然可以在JSON编码的字符串上使用jq代码中的fromjson
过滤器来解析它们,但仍然需要有效的编码。如果你的输入数据不是有效的JSON(参见https://www.json.org/获取完整的规范),你的选择取决于它与JSON的区别。以下是其中的一些:
id:1
的措辞不会被解释为键id
下的值1
,而是键id:1
下的未定义值。(如果在id:
和1
之间有一个空间,那么它会。尽管如此,您仍然可以尝试使用一个工具,将YAML转换为JSON,或者直接以您想要的方式处理YAML(几乎有效)JSON输入,并使用id:1
解决问题。尽管付出了更多的努力,但总的来说,这仍然是更好的实践,因为YAML数据仍然被视为数据,而不是代码。id:1
问题(如果值应该保持为字符串,则删除| tonumber
):--yaml-input
选项激活的YAML解释器。它的语言与jq的语言几乎相同(尽管存在一些微小的差异),因此可以应用相同的修复方法,并且实际上可以利用该解决方案的相同优势。| . tag = "!!int"
),并且重用原始jq代码也可能受到限制。