将json值更改为子字符串

时间:2019-06-07 12:04:59

标签: json regex jq

我在json结果集中有一个值,我想更改为原始值的子字符串值

{
   "label": "web page check",
  "target": "http://www.example.com/random/page"
},
{
   "label": "web page check1 ",
  "target": "http://www.example1.com/random/page"
}, 

我想做的就是将其返回为

{
  "label": "web page check",
  "target": "https://www.example.com"
},
{
   "label": "web page check",
  "target": "https://www.example1.com"
}

我尝试过

jq  '.[].target=(match(^https:\/\/[0-9a-zA-z.]*|^http:\/\/[0-9a-zA-z.]*).string)'

jq -c '.[] | {label: .label, target: (.target |=match(^https:\/\/[0-9a-zA-z.]*|^http:\/\/[0-9a-zA-z.]*).string})'

2 个答案:

答案 0 :(得分:0)

sub的第一个参数(需要jq 1.5 )可以是任何PCRE。

.[].target |= sub("(?<=com).*$"; "")

答案 1 :(得分:0)

与使用capture相比,使用match通常更容易。在您的情况下,假设您的输入是按照代码段建议的方式排列的对象数组,则下面的内容足以修改“目标”值:

map(.target |= (capture("https?(?<s>://[^/]*)") | "https" + .s))

等效地:

map(.target |= sub( "https?(?<s>://[^/]*).*"; "https" + .s) )