Home > Net >  Unable to assign multiple values from a file to a json request
Unable to assign multiple values from a file to a json request

Time:12-17

I have a simple file with this test line:

[email protected] 31460 147557432

My goal is to send as json data.

In my while loop I can echo the variables in the second line of my code example.

However, when I attempt to assign them to jsonstring and echo, the values are not populated.

What do I need to do to pass these values to my json string?

while read emailvar idvar expirevar; do
    echo "$emailvar:$expirevar:$idvar"
    jsonstring=$idvar $emailvar $expirevar
    echo "$jsonstring"      
#jsonstring='{"user_id":"$idvar","email":"$emailvar","custom_attributes":{"Program_Expires_at":"$expirevar"}}'
done < "tempdata.txt"

CodePudding user response:

#!/bin/bash

while read line;
do
    line_array=($line)
    emailvar=${line_array[0]}
    expirevar=${line_array[1]}
    idvar=${line_array[2]}
    jsonstring='{"user_id": "'$idvar'", "email": "'$emailvar'", "custom_attributes":{"Program_Expires_at": "'$expirevar'"}'
    echo $jsonstring

done < 'tempdata.txt'

Output: output

CodePudding user response:

You have to escape the whitespace to make it part of the string, rather than creating a simple command with some pre-command assignments.

jsonstring=$idvar\ $emailvar\ $expirevar

more commonly written as

jsonstring="$idvar $emailvar $expirevar"

In your commented assignment, you used single quotes, which prevent parameter expansion. You need to use double quotes, which requires manually escaping the interior double quotes. More robust, though, is to use a tool like jq to generate the JSON for you: it will take care of escaping any characters in your variables to generate valid JSON.

jsonstring=$(jq -n \
                --arg id "$idvar" \
                --arg email "$emailvar" \
                --arg expire "$expirevar" \
     '{user_id: $id,
       email: $email,
       custom_attributes: {Program_Expires_at: $expire}}'
)
  • Related