【问题标题】:Parsing multiple json values in linux jq [duplicate]在linux jq中解析多个json值[重复]
【发布时间】:2017-09-16 19:47:43
【问题描述】:

我有这样的json字符串:

jstring='[{"userQuery":"select name from abc;","user":"abc"},{"userQuery":"select name from xyz;","user":"xyz"},{"userQuery":"select name from ppp;","user":"ppp"}]'

我使用 jq 编写了一个简单的 for 循环来提取值,但没有得到想要的结果。

for i in `echo $jstring | jq '.[] | [.user, .userQuery]'`; do echo ${i}; done

借助这条线:echo $jstring | jq '.[] | [.user, .userQuery]'。我能够提取以下信息:

[ "abc", "select name from abc;"][ "xyz", "select name from xyz;"][ "ppp", "select name from ppp;"]

现在,我希望每个数组有两个变量“用户”和“查询”并存储该信息。
例如:For [ "abc", "select name from abc;"] -- user:abc, query: "select name from abc" 并存储。

我不确定如何使用 jq 遍历 json 并获取单个值并存储它们。

【问题讨论】:

标签: json shell jq


【解决方案1】:

我假设您的意思是将它们存储为 shell 变量。使用 bash 你可以写:

while read -r user query; do 
    echo "user->$user"
    echo "query->$query"
done < <( jq -r '.[] | "\(.user) \(.userQuery)"' <<< "$jstring" )
user->abc
query->select name from abc;
user->xyz
query->select name from xyz;
user->ppp
query->select name from ppp;

秘诀在于 jq 中字符串的公式化,它使用\(.user) 引用对象属性

我假设用户名不包含空格。否则,我们必须在该字符串中使用不同的分隔符,并在 shell 读取命令中使用 IFS

【讨论】:

【解决方案2】:

jq + bash 解决方案:

#!/bin/bash
jstring='[{"userQuery":"select name from abc;","user":"abc"},{"userQuery":"select name from xyz;","user":"xyz"},{"userQuery":"select name from ppp;","user":"ppp"}]'

while IFS=$'\t' read -r user query; do
    msg="User: ${user} is running : ${query}"
    mail -s "User query" "youremail@gmail.com" <<< "$msg"
done < <(jq '.[] | [.user,.userQuery] | @tsv' <<< "$jstring")

【讨论】:

  • 上述代码没有按预期工作,Glenn 发布的代码按预期工作。请检查输出,它没有按预期工作。
  • @PanwarS87,起初,它在解析和处理方面工作得很好。其次,您的预期输出(如您所说)不清楚。 我想要每个数组有两个变量“用户”和“查询”并存储该信息 - 这看起来/听起来不清晰。所以我做了男人和关键的工作。所以,你的主张听起来是先入为主的
  • 对不起,我可能听起来不清楚,但是当我运行上面的代码时,我得到了以下输出。用户:“abc\tselect name from abc;”正在运行:用户:“xyz\tselect name from xyz;”正在运行:用户:“ppp\tselect name from ppp;”正在运行:我可能在这里遗漏了一些东西,或者 IFS 没有按预期工作。
猜你喜欢
  • 2020-12-31
  • 1970-01-01
  • 1970-01-01
  • 2021-06-13
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
  • 2018-06-09
相关资源
最近更新 更多