преобразовать данные текстового файла в массив JSON в bash - PullRequest
0 голосов
/ 03 марта 2020

Я хочу вывод в формате массива JSON ниже с командой на платформе linux / bash. Кто-нибудь может помочь

данные в текстовом файле

test:test
test1:test1
test4:test4

Ожидаемый вывод:

{array : 
   [
     {test:test},
     {test1:test1}, 
     {test4:test4}
   ]
}

Ответы [ 3 ]

0 голосов
/ 03 марта 2020

Предполагая, что вы хотите фактический JSON вывод:

$ jq -nR '{array: (reduce inputs as $line ([]; . + [$line | split(":") | {(.[0]):.[1]}]))}' input.txt 
{
  "array": [
    {
      "test": "test"
    },
    {
      "test1": "test1"
    },
    {
      "test4": "test4"
    }
  ]
}
0 голосов
/ 04 марта 2020

Создание JSON лучше всего работает с выделенным инструментом JSON, который также может иметь смысл необработанного текста.
xidel - такой инструмент.

XPath:

xidel -s input.txt -e '{"array":x:lines($raw) ! {substring-before(.,":"):substring-after(.,":")}}'

(x:lines($raw) - сокращение для tokenize($raw,'\r\n?|\n'), которое создает последовательность всех строк.)

XQuery:

xidel -s input.txt --xquery '{"array":for $x in x:lines($raw) let $a:=tokenize($x,":") return {$a[1]:$a[2]}}'

См. Также this Онлайн-тестер Xidel.

0 голосов
/ 03 марта 2020

Использование jq командной строки JSON синтаксический анализатор:

<file jq -Rs '{array:split("\n")|map(split(":")|{(.[0]):.[1]}?)}'
{
  "array": [
    {
      "test": "test"
    },
    {
      "test1": "test1"
    },
    {
      "test4": "test4"
    }
  ]
}

Опции Rs позволяют jq читать весь файл как одну строку.

Сценарий split разбивает эту строку на части, чтобы получить ожидаемый формат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...