【问题标题】:Query json file using bash scropt使用 bash 脚本查询 json 文件
【发布时间】:2021-02-08 12:14:21
【问题描述】:

我有一个示例文件 relative.json,其中包含以下条目:

{
    "RELATIVES": [
        {
            "Name": "Ram",
            "Country": "India",
            "Phone": "111111111",           
        },
        {
            "Name": "James",
            "Country": "US",
            "Phone": "111111111",           
        },
        {
            "Name": "Robin",
            "Country": "UK",
            "Phone": "111111111",           
        },
        {
            "Name": "Shyam",
            "Country": "India",
            "Phone": "111111111",           
        },
        {
            "Name": "Jon",
            "Country": "US",
            "Phone": "111111111",           
        }
    ]
}

我希望编写一个简单的代码来读取所有这些条目,将其放入变量中并回显它 例如。 相对名称是来自印度的 Ram,电话号码为 111111111 相对姓名是来自印度的 James,电话号码为 111111111 相对名称是来自印度的 Robin,电话号码是 111111111

我是 jquery 的新手,但擅长 shell。请帮我写这个

【问题讨论】:

  • 请将该示例输入的所需输出(无描述)添加到您的问题(无评论)。
  • 看看jq解析JSON。
  • 解析错误:在第 7 行第 9 列需要另一个键值对 并修复该示例数据。谢谢。
  • 检查developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 文档。此页面还包含示例。

标签: json bash loops variables


【解决方案1】:

您的 json 样本不正确,这就是 jq 抱怨的原因。电话号码的末尾不应该有任何逗号,因此 json 实际上应该是:

{
    "RELATIVES": [
        {
            "Name": "Ram",
            "Country": "India",
            "Phone": "111111111"          
        },
        {
            "Name": "James",
            "Country": "US",
            "Phone": "111111111"           
        },
        {
            "Name": "Robin",
            "Country": "UK",
            "Phone": "111111111"          
        },
        {
            "Name": "Shyam",
            "Country": "India",
            "Phone": "111111111"           
        },
        {
            "Name": "Jon",
            "Country": "US",
            "Phone": "111111111"          
        }
    ]
}

将修改后的数据放在一个名为 relatives 的文件中,您可以使用 jq 来实现所需的输出,如下所示:

cat relatives | jq -r '.RELATIVES[] | "Name is "+.Name+" from "+.Country+" and phone number is "+.Phone'

-r 删除输出周围的引号, + 将字符串与值连接起来。

【讨论】:

    【解决方案2】:

    我会使用 GNU awk 和 JSON 扩展来完成这项工作:

    $ gawk '                                                         # using GNU awk
    @load "json"                                                     # load extension
    {
        lines=lines $0                                               # read full JSON
        if(json_fromJSON(lines,data)!=0) {
            for( i in data["RELATIVES"])                             # iterate relatives
                printf "Relative name is %s from %s and phone# %s ", # output records
                    data["RELATIVES"][i]["Name"], 
                    data["RELATIVES"][i]["Country"], 
                    data["RELATIVES"][i]["Phone"] 
    
            lines=""                                                 # rinse for repeat
        } 
    }' file.json
    

    按要求输出:

    Relative name is Ram from India and phone# 111111111 Relative name is James from US and phone# 111111111 Relative name is Robin from UK and phone# 111111111 Relative name is Shyam from India and phone# 111111111 Relative name is Jon from US and phone# 111111111
    

    【讨论】:

      猜你喜欢
      • 2023-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-24
      • 2014-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多