2016-04-10 30 views
0

Hier ist mein CodeShell Script Json, Mac

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##*|} 
} 

Das Problem hierbei ist, dass das Endgerät nur die ersten JSON Artikel ausdrucken, half_damage_to:[name|fighting wenn es sie alle zu drucken werden soll. Wie genau bekomme ich es, alle Elemente im JSON-Wörterbuch zu drucken, die innerhalb half_damage_to liegen?

Antwort

0

Verwenden extended-regexp(grep -E) auf half_damage_to Array passen und dann auf awkhalf_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}' 

Output aufzuspalten verwenden:

[ 
    { 
     "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" 
    } 
]