- 
            
      
        
      
    Star
      
          
          (211)
      
  
You must be signed in to star a gist  - 
              
      
        
      
    Fork
      
          
          (47)
      
  
You must be signed in to fork a gist  
- 
      
 - 
        
Save cjus/1047794 to your computer and use it in GitHub Desktop.  
| #!/bin/bash | |
| function jsonval { | |
| 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=`curl -s -X GET http://twitter.com/users/show/$1.json` | |
| prop='profile_image_url' | |
| picurl=`jsonval` | |
| `curl -s -X GET $picurl -o $1.png` | 
it works! tkz, great job!
{ "array": [ "foo", "bar" ], "other": "entry", "page": 1 }
what do I need to do, to get 'foo' and 'bar' ?
currently jsonValue array returns only foo
I would advise to use jq, like this : cat file.json | jq .array would give:
[
"foo",
"bar"
]
Small modification to display only one result for our $KEY.
awk -F"[,:}]" '{for(i=1;i<=NF;i++){if($i~/\042'$KEY'\042/){print $(i+1)}}}' | tr -d '"' | sed -e 's/^[[:space:]]*//'But... How to display whole result if it contains "," or ":" character?
jsonValue()
{
    num=$2
    grep \""$1"\" | sed  "s/\:/\n/"  | grep -v \""$1"\"  | sed "s/\"\,//g"  | sed 's/["]*$//' | sed 's/[,]*$//'| sed 's/^[ \t]*//'  | sed s/\"// | sed -n "${num}"p
}
Functionally same as @itstayyab, but , and : are also handled
Yes, i know, pretty late to the party.
Small modification to display only one result for our $KEY.
awk -F"[,:}]" '{for(i=1;i<=NF;i++){if($i~/\042'$KEY'\042/){print $(i+1)}}}' | tr -d '"' | sed -e 's/^[[:space:]]*//'
But... How to display whole result if it contains "," or ":" character?jsonValue() { num=$2 grep \""$1"\" | sed "s/\:/\n/" | grep -v \""$1"\" | sed "s/\"\,//g" | sed 's/["]*$//' | sed 's/[,]*$//'| sed 's/^[ \t]*//' | sed s/\"// | sed -n "${num}"p }Functionally same as @itstayyab, but
,and:are also handledYes, i know, pretty late to the party.
Works perfectly. Thanks
Small modification to display only one result for our $KEY.
awk -F"[,:}]" '{for(i=1;i<=NF;i++){if($i~/\042'$KEY'\042/){print $(i+1)}}}' | tr -d '"' | sed -e 's/^[[:space:]]*//'
But... How to display whole result if it contains "," or ":" character?jsonValue() { num=$2 grep \""$1"\" | sed "s/\:/\n/" | grep -v \""$1"\" | sed "s/\"\,//g" | sed 's/["]*$//' | sed 's/[,]*$//'| sed 's/^[ \t]*//' | sed s/\"// | sed -n "${num}"p }Functionally same as @itstayyab, but
,and:are also handled
Yes, i know, pretty late to the party.Works perfectly. Thanks
Just got the notification, glad it helped you. I have made some improvements since the last time.
###################################################
# Method to extract specified field data from json
# Globals: None
# Arguments: 2
#   ${1} - value of field to fetch from json
#   ${2} - Optional, nth number of value from extracted values, by default shows all.
# Input: file | here string | pipe
#   _json_value "Arguments" < file
#   _json_value "Arguments <<< "${varibale}"
#   echo something | _json_value "Arguments"
# Result: print extracted value
###################################################
_json_value() {
    declare LC_ALL=C num="${2:-}"
    grep -o "\"""${1}""\"\:.*" | sed -e "s/.*\"""${1}""\": //" -e 's/[",]*$//' -e 's/["]*$//' -e 's/[,]*$//' -e "s/\"//" -n -e "${num}"p
}To avoid forking of multiple sed processes
Got my, mentioned after 6 years :) Glad that I contributed to something.
Awesome bit of code. Thank you saved me a ton of time and frustrations. Why there is no string compare like a contains just baffles me. The heavy handed use of grep is so silly. All I wanted was a simple if (something.contains(this)); then this allows me to achieve this by parsing the JSON response and then very easily create the if statement. Thank you! You are a time saver!
Given this JSON in data.json:
{
  "id": "001",
  "color": "blue"
}
And I want to extract value "blue" from JSON property color in Windows git bash (no jq dependency), here's how I do it in a pinch:
grep color data.json | cut -d'"' -f4
Another way to do it:
https://raymii.org/s/snippets/Get_json_value_with_sed.html
Great it works very well with adding --silent option in curl