Isso pressupõe que a parte Description: ...
da mensagem é uma única linha e que os cabeçalhos estão na forma canônica (sem " subJECT :hey"
, por favor).
Ele está usando a especificação de formato jq
@sh
para escapar de sua saída de uma maneira adequada para o shell (com aspas simples). Obrigado a @ Stéphane Chazelas pelas correções.
parse_json(){
jq=$(jq -r '[.Email,.ID,(.details.message | split("\n")) | @sh] | join(" ")' -- "$1")
eval "set -- $jq"
email=$1; shift
id=$1; shift
for l; do
case $l in
"Your name: "*) name="${l#*: }";;
"Subject: "*) subject="${l#*: }";;
"Description: "*) description="${l#*: }";;
# remove the following line if you want the .Email from json instead
"Email: "*) email="${l#*: }";;
esac
done
echo "id={$id}"
echo "name={$name}"
echo "email={$email}"
echo "subject={$subject}"
echo "description={$description}"
}
fz:/tmp% parse_json a.json
id={5930}
name={john doe}
email={[email protected]}
subject={I need help with this}
description={I can find the download for the manual but I can only find the free updater for Windows or Mac. Can you help me please as I have a chrome notebook and Moto smart phone. Thank you. John doe
O case ... esac
acima pode ser substituído por algo que criará variáveis com os mesmos nomes que os cabeçalhos com caracteres não alfanuméricos substituídos por sublinhados. Isso funcionará somente com shells que suportam ${var//pat/repl}
de substituições ( bash
, zsh
, ksh93
):
parse_json(){
jq=$(jq -r '[.Email,.ID,(.details.message | split("\n")) | @sh] | join(" ")' -- "$1")
eval "set -- $jq"
Email=$1; shift
ID=$1; shift
for l; do
v="${l#*: }"; k="${l%%: *}"; eval "${k//[!a-zA-Z0-9]/_}=\$v"
done
}
show_vars(){
for v in ID Your_name Email Subject Description; do
eval "echo \"$v=[\$$v]\""
done
}
fz:/tmp$ parse_json a.json
fz:/tmp$ show_vars
ID=[5930]
Your_name=[john doe]
Email=[[email protected]]
Subject=[I need help with this]
Description=[I can find the download for the manual but I can only find the free updater for Windows or Mac. Can you help me please as I have a chrome notebook and Moto smart phone. Thank you. John doe]