【问题标题】:Shell Script Json, MacShell 脚本 Json, Mac
【发布时间】:2023-07-26 06:08:01
【问题描述】:

这是我的代码

function poke() {

    json="curl -s -X GET http://pokeapi.co/api/v2/type/bug.json";
    prop="half_damage_to"
    temp=echo $json | sed 's/\\\\\//\//g' | sed 's/[{}]//g' | awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}' | sed 's/\"\:\"/\|/g' | sed 's/[\,]/ /g' | sed 's/\"//g' | grep -w $prop
    echo ${temp##*|}
}

这里的问题是终端只打印出第一个 JSON 项目,half_damage_to:[name|fighting,而它应该全部打印出来。我究竟如何让它打印 JSON 字典中 half_damage_to 内的所有项目?

【问题讨论】:

    标签: json macos shell terminal


    【解决方案1】:

    使用extended-regexp(grep -E) 匹配half_damage_to 数组,然后使用awk 拆分half_damage_to

    curl -s -X GET http://pokeapi.co/api/v2/type/bug.json |  grep -oE '"half_damage_to":\[{.*?\}]' | awk 'BEGIN {FS="half_damage_to\":"} {print $2}'
    

    输出:

    [  
       {  
          "name":"fighting",
          "url":"http://pokeapi.co/api/v2/type/2.json"
       },
       {  
          "name":"flying",
          "url":"http://pokeapi.co/api/v2/type/3.json"
       },
       {  
          "name":"poison",
          "url":"http://pokeapi.co/api/v2/type/4.json"
       },
       {  
          "name":"ghost",
          "url":"http://pokeapi.co/api/v2/type/8.json"
       },
       {  
          "name":"steel",
          "url":"http://pokeapi.co/api/v2/type/9.json"
       },
       {  
          "name":"fire",
          "url":"http://pokeapi.co/api/v2/type/10.json"
       },
       {  
          "name":"fairy",
          "url":"http://pokeapi.co/api/v2/type/18.json"
       }
    ]
    

    【讨论】: