如何用jq从JSON的hrefFull提取内容赋值给hrefSimple和hrefSubsite
使用jq从hrefFull字段生成hrefSimple和hrefSubsite字段的正确实现
针对Azure App Insights导出的页面浏览量JSON数组,以下是符合需求的jq解决方案,可正确生成hrefSimple和hrefSubsite字段,解决对象4-6的取值错误问题。
核心jq命令
jq 'map(. + { hrefSimple: (.hrefFull | if test(".*articles.*") then capture("articles.*") .0 else split("/")[-1] end ), hrefSubsite: (.hrefFull | if test(".*/articles") then sub("^https://docs.mysite.com/"; "") | split("/articles")[0] else sub("^https://docs.mysite.com/"; "") | split("/") | .[0:-1] | join("/") end // "" ) })' input.json > output.json
逻辑说明
hrefSimple生成规则
- 检查
hrefFull是否包含articles字符串:- 包含则提取从
articles开始的所有后续内容 - 不包含则取URL最后一个
/之后的内容
- 包含则提取从
hrefSubsite生成规则
- 检查
hrefFull是否包含/articles子串:- 包含则提取
https://docs.mysite.com/与/articles之间的路径部分 - 不包含则提取
https://docs.mysite.com/到最后一个/之间的路径部分(无中间路径则返回空字符串)
- 包含则提取
7个示例验证
以下为输入输出的对应示例:
输入
{"hrefFull": "https://docs.mysite.com/subsite1/articles/getting-started"}输出
{ "hrefFull": "https://docs.mysite.com/subsite1/articles/getting-started", "hrefSimple": "articles/getting-started", "hrefSubsite": "subsite1" }输入
{"hrefFull": "https://docs.mysite.com/articles/overview"}输出
{ "hrefFull": "https://docs.mysite.com/articles/overview", "hrefSimple": "articles/overview", "hrefSubsite": "" }输入
{"hrefFull": "https://docs.mysite.com/subsite2/subsite3/articles/guide"}输出
{ "hrefFull": "https://docs.mysite.com/subsite2/subsite3/articles/guide", "hrefSimple": "articles/guide", "hrefSubsite": "subsite2/subsite3" }输入
{"hrefFull": "https://docs.mysite.com/subsite1/faq"}输出
{ "hrefFull": "https://docs.mysite.com/subsite1/faq", "hrefSimple": "faq", "hrefSubsite": "subsite1" }输入
{"hrefFull": "https://docs.mysite.com/home"}输出
{ "hrefFull": "https://docs.mysite.com/home", "hrefSimple": "home", "hrefSubsite": "" }输入
{"hrefFull": "https://docs.mysite.com/subsite2/tools/editor"}输出
{ "hrefFull": "https://docs.mysite.com/subsite2/tools/editor", "hrefSimple": "editor", "hrefSubsite": "subsite2/tools" }输入
{"hrefFull": "https://docs.mysite.com/articles/reference/api"}输出
{ "hrefFull": "https://docs.mysite.com/articles/reference/api", "hrefSimple": "articles/reference/api", "hrefSubsite": "" }
内容的提问来源于stack exchange,提问作者hcdocs
相关产品推荐
相关产品推荐

