gpt4 book ai didi

json - 我如何制作这个在 jq >= 1.5 中工作的 jq 表达式,向后兼容/正确版本 < 1.5

转载 作者:行者123 更新时间:2023-11-29 09:50:59 25 4
gpt4 key购买 nike

jq >= 1.5 的任何版本(我试过)中, 这很好用
jq <= 1.4的任何版本中,我收到以下错误:

error: syntax error, unexpected <strong>as</strong>, expecting FORMAT or QQSTRING_START

有很多关于错误的信息:“expecting FORMAT or QQSTRING_START”,到目前为止我所看到的还没有应用到这里,我想知道它是否是 as 我没有可靠地实现

我可以用这段简单的代码重现问题:(可以按原样复制/粘贴以进行测试)

jq \'(..|.liveBroadcastContent?'\'| foreach . as $item (.; if $item == null then false else . end)) as $chanstatus '\'| {location:"location",channel:"channelid",current_id:"vId",id_status:$chanstatus,url:"https://youtu.be/\("vId")"}' \<<<'{"liveBroadcastContent":true}'

Desired result achieved on jq > 1.5:

{
"location": "location",
"channel": "channelid",
"current_id": "vId",
"id_status": true,
"url": "https://youtu.be/vId"
}

它应该做什么:

  • 如果liveBroadcastContent 存在在输入中:然后在id_status中输出它的值键
  • 如果liveBroadcastContent 不存在:则输出falseid_status
  • 输出所有其他内容

实际输入:

This是当存在直播流时进入程序的内容。
This是在没有直播时进入程序的内容

因此我想到..|.liveBroadcastContent?是基本上说“如果这个键出现在数据中的某处,请在我的固定格式输出的 部分返回它的值的最可靠方式数据

既然应用程序很明显,请注意我知道使用其他方法,例如检查 "totalResults" 的值, 结合 HTTP 200 ,除其他外,然而:

  1. jq 的申请可能在其他地方有用,我想这样说。
  2. 整个程序是一个按需一次性调用的共享程序,是更全面实现的oauth服务器应用程序的备份方法(API key )。有时输入数据不同,因此我只想递归搜索 liveBroadcastContent

编辑: 澄清一下 - 这不是关于 jq 的行为跨版本(属于 jq 论坛的内容)- 这是关于制作最健壮的可移植代码。我倾向于认为 >1.5 的版本只是原谅了一个格式不正确的表达式(我正在尝试在这里解决)

最佳答案

  1. 您的代码片段在 jq 1.4 中失败的原因是 foreach 仅在 1.5 版中引入。

  2. 我不确定您使用 foreach 的程序是否符合您声明的要求,不幸的是,这些要求有点不清楚。例如,如果“liveBroadcastContent”键在输入 JSON 实体中出现多次怎么办?

  3. 据我了解,您陈述的要求(掩盖歧义)将对应于以下程序,该程序已使用 jq 1.4、1.5 和当前的“主”版本进行测试:

 (reduce (..| select(type == "object" and has("liveBroadcastContent"))) as $item
(false; $item | .liveBroadcastContent)) as $chanstatus
| {location:"location",
channel:"channelid",
current_id:"vId",
id_status:$chanstatus,
url:"https://youtu.be/\("vId")"}
  1. 对于像这样的多行程序,通常使用 jq 的 -f 选项会更方便,例如jq -f program.jq

  2. 如果您还需要适应 jq 1.3,那么您必须处理 ..,这可以通过使用 dotdot 来完成,定义如下:

def dotdot:
recurse(if (type | . == "object" or . == "array") then .[] else empty end);

关于json - 我如何制作这个在 jq >= 1.5 中工作的 jq 表达式,向后兼容/正确版本 < 1.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44564801/

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