我熟悉解析json的“ jq”。
我使用一种产生json响应的服务,其中属性之一本身就是json字符串。如何将引用的值转换为有效的json字符串,以便随后可以使用jq处理它?
例如,如果我只是从“ jq”查看普通的漂亮打印的json,这是输出的简短摘录:
"someJsonString": "{\"date\":\"2018-01-08\", ...
我可以使用jq来获取该属性的值,但是我需要通过“取消转义”将带引号的字符串转换为有效的json。
我想我可以将其用管道传递到sed中,删除开头和结尾的双引号,并删除所有反斜杠(“ sed -e 's/^"//' -e 's/"$//' -e 's/\\//g'
”)。这似乎可行,但似乎不是最可靠的解决方案。
更新:
为了更清楚我在做什么,以下是一些省略的样本,这些样本显示了我的尝试:
% curl -s -q -L 'http://.../1524.json' | jq '.results[0].someJsonString' | jq .
"{\"date\":\"2018-01-08\",...
% echo $(curl -s -q -L 'http:/.../1524.json' | jq '.results[0].someJsonString') | jq .
"{\"date\":\"2018-01-08\",...
更新:
这是一个完全独立的示例:
% cat stuff.json | jq .
{
"stuff": "{\"date\":\"2018-01-08\"}"
}
% cat stuff.json | jq '.stuff'
"{\"date\":\"2018-01-08\"}"
% cat stuff.json | jq '.stuff' | jq .
"{\"date\":\"2018-01-08\"}"
更新:
如果我尝试使用真实的jq表达式处理最后的输出,则它将执行以下操作:
% cat stuff.json | jq '.stuff' | jq '.date'
assertion "cb == jq_util_input_next_input_cb" failed: file "/usr/src/ports/jq/jq-1.5-3.x86_64/src/jq-1.5/util.c", line 371, function: jq_util_input_get_position
Aborted (core dumped)
有一个raw
标志
-r output raw strings, not JSON texts;
jq -rc .stuff stuff.json
输出
{"date":"2018-01-08"}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句