Pedro
Pedro

Reputation: 383

Looping through a json file using jq

Related to: Getting data from json using jq when key is numerical string but different as I have the numerical key stored in a variable. See the example below.

File temp.json:

{
  "bccc26321e360ae5fde94aac81eef7c7270bbfd90de0787d0e5b45be4b21ce53": {
    "size": 189,
    "fee": 0.00000678,
    "modifiedfee": 0.00000678,
    "time": 1535906461,
    "height": 539665
  },
  "43906c7227610cd58a1c95714e4f79cd46e0d98ae3f4214f1b2cf325b628b70e": {
    "size": 256,
    "fee": 0.00008328,
    "modifiedfee": 0.00008328,
    "time": 1535906461,
    "height": 539665
  }
}

Attempts to index with a variable:

#get second key 43906c7227610cd58a1c95714e4f79cd46e0d98ae3f4214f1b2cf325b628b70e
>txid=$(cat temp.json | jq 'keys' | jq .[1] | tr -d '"')
>cat temp.json | jq .$txid
jq: error: syntax error, unexpected IDENT, expecting $end (Unix shell quoting issues?) at <top-level>, line 1:
.43906c7227610cd58a1c95714e4f79cd46e0d98ae3f4214f1b2cf325b628b70e
jq: 1 compile error

>cat temp.json | jq '.$txid'
q: error: syntax error, unexpected '$' (Unix shell quoting issues?) at <top-level>, line 1:
.$txid 
jq: error: try .["field"] instead of .field for unusually named fields at <top-level>, line 1:
.$txid
jq: 2 compile errors

>cat temp.json | jq '."$txid"'
null

The desired output is simply

>cat temp.json | jq '."43906c7227610cd58a1c95714e4f79cd46e0d98ae3f4214f1b2cf325b628b70e"'
{
        "size": 256,
        "fee": 0.00008328,
        "modifiedfee": 0.00008328,
        "time": 1535906461,
        "height": 539665
      }

Upvotes: 0

Views: 507

Answers (1)

Zastai
Zastai

Reputation: 1265

If what you want is ."xxx" as argument, then use ".\"$txid\"". If you drop the tr -d '"', ".$txid" may even be enough.

Upvotes: 1

Related Questions