Команда grep из файла json - сценарий Bash - PullRequest
1 голос
/ 09 мая 2020

Мой json файл имеет следующее содержимое:

{
  "Fruits": {
    "counter": 1,
    "protocols": [
      {
        "id": "100",
        "name": "lemon",
        "category": "citrus"
      },
      {
        "id": "350",
        "name": "Orange",
        "category": "citrus"
      },
      {
        "id": "150",
        "name": "lime",
        "category": "citrus"
      }
    ]
  }
}

Я ожидаю вывода, как показано ниже

Fruits:lemon:citrus
Fruits:Orange:citrus
Fruits:lime:citrus

Ответы [ 2 ]

5 голосов
/ 09 мая 2020

Легко сделать с jq:

$ jq -r '.Fruits.protocols[] | "Fruits:\(.name):\(.category)"' input.json
Fruits:lemon:citrus
Fruits:Orange:citrus
Fruits:lime:citrus
0 голосов
/ 09 мая 2020

Ответ jq лучше. По-прежнему публикуется решение Ruby (если вы не можете использовать jq), но оно менее элегантно:

ruby -e '
  require "json";
  l="";
  ARGF.each { |x| l+=x };
  obj=JSON.parse(l);
  obj["Fruits"]["protocols"].each { |x| puts "Fruits:#{x["name"]}:#{x["category"]}" }
'

Вот полный пример:

echo '{"Fruits":{"counter":1,"protocols":[{"id":"100","name":"lemon","category":"citrus"},{"id":"350","name":"Orange","category":"citrus" },{"id":"150","name":"lime","category":"citrus"}]}}' \
| ruby -e 'require "json";l="";ARGF.each { |x| l+=x } ; obj=JSON.parse(l) ; obj["Fruits"]["protocols"].each { |x| puts "Fruits:#{x["name"]}:#{x["category"]}" }'

Вывод:

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