Анализировать значение определенного элемента в случайной позиции файла JSON

Если вы создаете резервную копию каталога, описанного ниже, имейте в виду

  1. all directory and subdirectory have read and write privileges
  2. If any file that file have read privileges 

Теперь, если резервное копирование произведено любым привилегированным пользователем, используйте sudo. Перед использованием sudo проверьте пользователя в файле / etc / sudoers, есть ли у пользователя доступ к sudo или нет. Если нет, то попробуйте от имени пользователя root.

1
24.01.2017, 21:17
3 ответа

Предполагая, что отсутствует ] вставляется в конец, это документ JSON, и его следует проанализировать с помощью парсера JSON, такого как jq .

Использование jq :

$ jq -r '.[] | select(.data[0].VALUE1) | .sid' data.json
789069

Это возьмет массив объектов JSON и выберет объект, который имеет ключ с именем VALUE1 в первом элементе data запись массива. Затем он извлечет значение записи sid из этого объекта.

Параметр -r для jq предназначен для «сырого вывода». Без него мы получили бы значение в двойных кавычках.

4
27.01.2020, 23:16

Grep - хороший инструмент для такого рода проблем grep -oP '"sid": "\ d +"' file . Это то, что вы ищете?

ОБНОВЛЕНИЕ : ЭТО НЕ !!! (Извините: я не понял основного вопроса.)

вторая версия: использование инструмента json с именем json :

cat a.json | json -c '"VALUE1" in this.data[0]' | json -a sid

или

cat a.json | json -c '"VALUE1" in this.data[0]' -a sid 
  • json -c predicate - фильтрует элементы ( filter)
  • json -a expression - применяет выражение ко всем элементам (map)

, документация в: http://trentm.com/json/ . Если не установлен:

install node
and sudo npm install -g json
1
27.01.2020, 23:16

В awk , если вы хотите сопоставить всю запись, вы можете использовать:

awk '{if($0~/789069/){print $0}}' file

В этом коде awk проверит, содержит ли строка значение 789069 , затем напечатает его как есть и проигнорирует другие строки.

Вывод:

[{"cid":"PWER","data":[{"VALUE1":0}],"sid":"789069","units":"kWm","age":586667},
{"cid":"PWER_SUB","data":[{"VALUE5":0}],"sid":"789069","units":null,"age":4}
0
27.01.2020, 23:16

Теги

Похожие вопросы