Не могу разобрать RAW DATA с JQ - PullRequest
0 голосов
/ 30 апреля 2020

Я хочу создать JSON из списка серверов, которые хранятся внутри переменной, но я получаю ошибку разбора.

Как я могу заставить эту работу? Я думаю, что цитирование каждого сервера может работать, но я не могу этого сделать, поскольку данные извлекаются из CSV с помощью curl.

server_list=$(curl http://localhost/api/server_list.csv | cut -d ',' -f2);
echo $server_list
host001 host002 host003 host004

echo $server_list | jq '.'
parse error: Invalid numeric literal at line 1, column 15

, если это сработало, я мог бы выполнить следующую команду, чтобы создать json .

echo $server_list | jq -r '.' | jq -s '{hosts:map({"hostid":.})}')

Ответы [ 3 ]

2 голосов
/ 30 апреля 2020

Достаточно одного вызова jq:

jq -R 'split(" ") | {hosts:map({"hostid":.})}' <<< "$server_list"
0 голосов
/ 30 апреля 2020

Если вы используете echo $server_list | jq -R '.' | jq -s '{hosts:map({"hostid":.})}', то получится:

{
  "hosts": [
    {
      "hostid": "host001 host002 host003 host004"
    }
  ]
}

Не уверен, что это именно то, что вы ожидаете получить, но, надеюсь, поможет.

С небольшим дополнительным манипуляции в jq вы можете легко расширить результат вывода.

echo $server_list | jq -s -R '{hosts:split(" ")|map(split("\n"))|map({"hostid": .[0]})}'
{
  "hosts": [
    {
      "hostid": "host001"
    },
    {
      "hostid": "host002"
    },
    {
      "hostid": "host003"
    },
    {
      "hostid": "host004"
    }
  ]
}
0 голосов
/ 30 апреля 2020

Разобрался.

echo $server_list | jq -R 'split (" ")'  | jq '.[]' | jq -s '{hosts:map({"hostid":.})}'
...