gpt4 book ai didi

json - JQ 用 "-"解析字符串

转载 作者:行者123 更新时间:2023-12-03 19:55:12 26 4
gpt4 key购买 nike

我的JSON:

{
"projects": {
"api-client": {
"status": "false",
"when": "19-01-2016 12:54:47"
},
"api-admin": {
"status": "false",
"when": "19-01-2016 12:54:47"
},
"myweb": {
"status": "false",
"when": "19-01-2016 12:54:47"
}
}
}

脚本:
JQ=$(which jq)
CACHE='cache.json'
PROJECT=("api-client" "api-admin" "myweb")
for PROJECT in ${PROJECTS[*]}; do
if [[ $(${JQ} -r ".projects.\"${PROJECT}\"" ${CACHE}) != null ]]; then
if [[ $(${JQ} -r ".projects.\"${PROJECT}\".status" ${CACHE}) == true ]]; then
local PROJECTDATE=$(${JQ} -r ".projects.\"${PROJECT}\".when" ${CACHE})
local STATUS="${COLOR_GREEN}Installed${CLEAR} on ${COLOR_YELLOW}${PROJECTDATE}${CLEAR}"
else
local STATUS="${COLOR_RED}Not installed${CLEAR}"
fi
echo -e "${CLEAR} - ${COLOR_CYAN}${PROJECT}${CLEAR} => ${STATUS}"
fi
done

Error: error: syntax error, unexpected QQSTRING_START, expecting IDENT .projects."api-client" ^ 1 compile error error: syntax error, unexpected QQSTRING_START, expecting IDENT .projects."api-client".status ^ 1 compile error - api-client => Not installed



有人可以帮忙调试我的脚本吗?

最佳答案

首先,.foo.bar只是 .["foo"]["bar"] 的简写语法.将后者用于非字母数字值,例如 api-client .

其次,您永远不应该通过将 shell 变量插入其中来编写 jq 脚本。相反,使用 --arg 将值传递给它们。也就是说,而不是这样做:

${JQ} -r ".projects.\"${PROJECT}\"" ${CACHE}

你可能应该这样做:
${JQ} --arg project "$PROJECT" -r '.projects[$project]' ${CACHE}

注意 jq 程序周围的单引号: $project是 jq 变量的语法,如 Perl 或 PHP;它没有被 shell 插入。始终在 jq 程序周围使用单引号。

第三,您可以使用 -e所以真值的状态码为 0。取而代之的是:
if [[ $(${JQ} -r ".projects.\"${PROJECT}\"" ${CACHE}) != null ]]; then

你可以这样做:
if ${JQ} --arg project "$PROJECT" -e -r '.projects[$project]' ${CACHE}; then

同样,您可以以相同的方式删除与 true 的比较。

关于json - JQ 用 "-"解析字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34880288/

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