首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将嵌入(引号) json字符串转换为json

问如何将嵌入(引号) json字符串转换为json
EN

Unix & Linux用户
提问于 2018-01-08 21:25:58
回答 2查看 58.7K关注 0票数 55

我熟悉用于解析json的"jq“。

我使用一个产生json响应的服务,其中一个属性本身就是一个json字符串。如何将引用的值转换为有效的json字符串,以便使用jq处理它?

例如,如果我只是从"jq .“中查看打印得很简单的json,下面是输出的简短摘录:

代码语言:javascript
复制
"someJsonString": "{\"date\":\"2018-01-08\", ...

我可以使用jq来获取该属性的值,但我需要通过“un转义”将引用的字符串转换为有效的json。

我想我可以将其输入sed,删除开头和结尾的双引号,并删除所有反斜杠("sed -e 's/^"//' -e 's/"$//' -e 's/\\//g'")。这似乎有效,但这似乎不是最可靠的解决方案。

更新:

为了更清楚地了解我在做什么,这里有几个被省略的样本,它们展示了我尝试过的东西:

代码语言:javascript
复制
% 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\",...

更新:

下面是一个完全独立的例子:

代码语言:javascript
复制
% 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表达式处理最后一个输出,它会执行如下操作:

代码语言:javascript
复制
% 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)
EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2018-04-27 18:31:31

这里有一个raw标志

代码语言:javascript
复制
    -r      output raw strings, not JSON texts;
代码语言:javascript
复制
jq -rc .stuff stuff.json

输出

代码语言:javascript
复制
{"date":"2018-01-08"}
票数 42
EN

Unix & Linux用户

发布于 2018-01-08 21:49:29

使用jq's fromjson函数:

样本stuff.json内容:

代码语言:javascript
复制
{
  "stuff": "{\"date\":\"2018-01-08\"}"
}
代码语言:javascript
复制
jq -c '.stuff | fromjson' stuff.json

产出:

代码语言:javascript
复制
{"date":"2018-01-08"}
票数 80
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/415679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档