изменение значения json для подстроки - PullRequest
0 голосов
/ 07 июня 2019

У меня есть значение в наборе результатов 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 голосов
/ 07 июня 2019

Использование capture часто проще, чем использование match. В вашем случае для изменения «целевых» значений будет достаточно, если в качестве входных данных используется массив объектов по линиям, предложенным во фрагменте:

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

Эквивалентное:

map(.target |= sub( "https?(?<s>://[^/]*).*"; "https" + .s) )
0 голосов
/ 07 июня 2019

Первый аргумент sub ( требует jq 1.5 ) может быть любым PCRE.

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