Как разобрать / заменить значение в jq для json файла - PullRequest
0 голосов
/ 05 февраля 2020

Как проанализировать / заменить значение в jquery.

Json файле, как показано ниже:

{
  "09800214851900C3": {
    "label": "P7-R1-R16:S2",
    "name": "Geist Upgradable rPDU",
    "state": "normal",
    "order": 0,
    "type": "i03",
    "snmpInstance": 1,
    "lifetimeEnergy": "20155338",
    "outlet": {},
    "alarm": {
      "severity": "",
      "state": "none"
    },
    "layout": {
      "0": [
        "entity/total0",
        "entity/phase0",
        "entity/phase1",
        "entity/phase2"
      ]
    }
  }
}

Я хочу сделать, как показано ниже, но это не работает. Любая идея / ведет по этому вопросу будет оценена.

a=09800214851900C3

jsonfile.json | jq '.${a}.label'

1 Ответ

1 голос
/ 05 февраля 2020

Ваша текущая попытка имеет следующие проблемы:

  • jsonfile.json не является командой, поэтому вы не можете использовать ее в качестве первого токена командной строки. Вы могли бы cat jsonfile.json | jq ..., но предпочтительный способ заставить jq работать с файлом - использовать jq 'command' file

  • , вы определяете переменную a в вашей оболочке, но вы попытаться ссылаться на него внутри строки в одинарных кавычках, что не позволяет оболочке расширять ее до ее действительного значения. Основанное на оболочке решение состоит в использовании двойных кавычек для раскрытия переменной, но предпочтительно определять переменную в контексте самого jq, используя параметр --arg varname value

  • 09800214851900C3 не считается «простым идентичным ключу ключом» jq (потому что он начинается с di git), поэтому стандартный способ доступа к значению, связанному с этим ключом (.key), не не работает, и вам нужно использовать ."09800214851900C3" или .["09800214851900C3"] вместо

В заключение я считаю, что вы захотите использовать следующую команду:

jq --arg a 09800214851900C3 '.[$a].label' jsonfile.json
...