bash脚本将字符串值转换为json,然后返回json

问题描述

我对bash脚本非常陌生,请有人可以向我指出如何完成任务的正确方向。 我有一个curl调用,它返回一个字符串,我想将其转换为json。

我的curl声明-

curl --insecure -X POST 'https://url/api/IPAM/GetIP' --header 'Content-Type: application/json' --header -d '{"key1": "value1"}'

此curl语句在执行时返回一个字符串,例如10.100.100.100

我想获取此字符串并以json格式返回输出

{"IP":"10.100.100.100"}

我不使用jquery或python来执行此操作,因为整个脚本将由仅了解bash的包装程序运行。

解决方法

您可以使用jq将IP字符串处理为JSON字符串并将其打包为您选择的JSON对象。

ip="10.100.100.100"
jq --arg ip "$ip" -cn '{"IP":$ip}'

结果:

{"IP":"10.100.100.100"}

现在,如果使用示例curl POST请求的结果,则:

rawip_string=$(curl --insecure -X POST 'https://url/api/IPAM/GetIP' --header 'Content-Type: application/json' --header -d '{"key1": "value1"}')

jq --arg ip "$rawip_string" -cn '{"IP":$ip}'
,

一种不依赖jq之类的外部工具的方法是,您可以将输出ip属性获取为变量并将其连接。

$ return=$(echo 10.100.100.100)
$ echo "{\"IP\":\"${return}\"}"
{"IP":"10.100.100.100"}
,

printf '{"IP":"%s"}' "$(curl --insecure -X POST 'https://url/api/IPAM/GetIP' --header 'Content-Type: application/json' --header -d '{"key1": "value1"}')"