tom
tom

Reputation: 263

Extract json response to shell variable using jq

I have a sample json response as shown below which i am trying to parse using jq in shell script.[{"id":1,"notes":"Demo1\nDemo2"}]

This is the command through which I am trying to access notes in the shell script.

value=($(curl $URL | jq -r '.[].notes')) 

When I echo "$value" I only get Demo1. How to get the exact value: Demo1\nDemo2 ?

Upvotes: 0

Views: 1462

Answers (1)

that other guy
that other guy

Reputation: 123410

To clarify, there is no backslash or n in the notes field. \n is JSON's way of encoding a literal linefeed, so the value you should be expecting is:

Demo1
Demo2

The issue you're seeing is because you have split the value on whitespace and created an array. Each value can be accessed by index:

$ cat myscript
data='[{"id":1,"notes":"Demo1\nDemo2"}]'
value=($(printf '%s' "$data" | jq -r '.[].notes'))
echo "The first value was ${value[0]} and the second ${value[1]}"

$ bash myscript
The first value was Demo1 and the second Demo2

To instead get it as a simple string, remove the parens from value=(..):

$ cat myscript2
data='[{"id":1,"notes":"Demo1\nDemo2"}]'
value=$(printf '%s' "$data" | jq -r '.[].notes')
echo "$value"

$ bash myscript2
Demo1
Demo2

Upvotes: 1

Related Questions