Невозможно извлечь другое имя массива из файла json - PullRequest
1 голос
/ 05 февраля 2020

У меня есть несколько 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"
      ]
    }
  }
}

, из этого я хочу извлечь, как показано ниже, используя jq

09800214851900C3 : P7-R1-R16:S2

Я столкнулся с проблемой, что это значение массива {09800214851900C3} отличается от всех файлов JSON. Поэтому мне нужна помощь, чтобы извлечь то же самое.

Ответы [ 2 ]

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

На основе формата данных, при условии, что вам нужен первый ключ в объекте и его значение метки.
Используйте Object.keys для получения ключей объекта и получения необходимого значения без жесткого кодирования.

const data = {
  "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"
      ]
    }
  }
};


const extract = (key = Object.keys(data)[0], `${key} : ${data[key].label}`);

console.log(extract)
0 голосов
/ 05 февраля 2020

Я исправил это. Я извлекаю 1-й ключ, используя приведенный ниже jq-запрос

jsonfile.json | jq -r '.keys[]'

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

jsonfile.json | jq -r '.09800214851900C3.label'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...