Преобразовать строку в JSON в bash - PullRequest
1 голос
/ 10 апреля 2020

У меня есть строка, которая форматируется как длинная строка (без перевода строки), например:

<NAME1>ID1>CODE1a>CODE1b>><NAME2>ID2>CODE2a>CODE2b>><NAME3>ID3>CODE3a>CODE3b>>

Идея заключается в преобразовании этой строки в JSON:

{
  "ID1": [
    "NAME1",
    "CODE1a",
    "CODE1b"
  ],
  "ID2": [
    "NAME2",
    "CODE2a",
    "CODE2b"
  ],
  "ID3": [
    "NAME3",
    "CODE3a",
    "CODE3b"
  ]
}

Вопрос в том, что мне нужно, чтобы в одной команде (что-то вроде cat testfile.txt | sed "..." | tr "...")

я пытался использовать sed, tr, jq, но безуспешно, и я полностью застрял , Заранее спасибо

1 Ответ

1 голос
/ 11 апреля 2020

Все это можно сделать, используя только jq, например:

jq -R '
  sub("^<";"")
  | split(">><")
  | map(split(">"))
  | map( { (.[1]) : (.[0:1] + (.[2:] | map(select(.!="")))) } )
  | add
'
...