Анализ нескольких условий JSON - PullRequest
0 голосов
/ 07 февраля 2019

Я изо всех сил пытаюсь получить желаемый вывод, используя JSON.parse из приведенного ниже ввода JSON.Я использую JavaScript и, в основном, мне нужно получить идентификаторы каждой категории на основе названия категории.У меня есть имена в качестве условий в моей системе, теперь мне нужно получить все 3 идентификатора.

Данные JSON:

{"TokenID": "9FBBD91BBB",
"OrgID": 0,
"OutputObject": {
    "SUBROOT": [{
        "Parent Category": "Hardware",
        "Parent CategoryId": 2,
        "Sub Category": "Computer",
        "Sub CategoryId ": 3,
        "Child Category": "CPU",
        "Child CategoryId": 4,
        "Tenant": "IT"
    },
    {
        "Parent Category": "Hardware",
        "Parent CategoryId": 2,
        "Sub Category": "Router",
        "Sub CategoryId ": 3,
        "Child Category": "Cisco",
        "Child CategoryId": 6,
        "Tenant": "IT"
    },
    {
        "Parent Category": "Software",
        "Parent CategoryId": 7,
        "Sub Category": "Windows",
        "Sub CategoryId ": 8,
        "Child Category": "Operating System",
        "Child CategoryId": 9,
        "Tenant": "IT"
    },
    {
        "Parent Category": "Software",
        "Parent CategoryId": 7,
        "Sub Category": "ERP",
        "Sub CategoryId ": 10,
        "Child Category": "SAP",
        "Child CategoryId": 11,
        "Tenant": "IT"
    }]
  }
}

Запрос

{
        "Parent Category": "Hardware",
        "Sub Category": "Router",
        "Child Category": "Cisco"
}

Желаемый вывод:

"Parent CategoryId": 2,
"Sub CategoryId ": 3,
"Child CategoryId": 6

1 Ответ

0 голосов
/ 07 февраля 2019

Мое предложение было бы разделить два требования.Сначала получите все записи, соответствующие вашему запросу, затем выберите нужные вам ключи.Например:

// match query against every entry in input
const match = (query, input) => input.filter((entry) => Object.entries(query).every(([k, v]) => entry[k] === v));

// pluck only the required keys from every entry in input
const pluck = (keys, input) => input.map((entry) => keys.reduce((acc, k) => ({...acc, [k]: entry[k]}), {}));

//////////

const input = {
  "TokenID": "9FBBD91BBB",
  "OrgID": 0,
  "OutputObject": {
    "SUBROOT": [
      {
        "Parent Category": "Hardware",
        "Parent CategoryId": 2,
        "Sub Category": "Computer",
        "Sub CategoryId ": 3,
        "Child Category": "CPU",
        "Child CategoryId": 4,
        "Tenant": "IT"
      },
      {
        "Parent Category": "Hardware",
        "Parent CategoryId": 2,
        "Sub Category": "Router",
        "Sub CategoryId": 3,
        "Child Category": "Cisco",
        "Child CategoryId": 6,
        "Tenant": "IT"
      },
      {
        "Parent Category": "Software",
        "Parent CategoryId": 7,
        "Sub Category": "Windows",
        "Sub CategoryId": 8,
        "Child Category": "Operating System",
        "Child CategoryId": 9,
        "Tenant": "IT"
      },
      {
        "Parent Category": "Software",
        "Parent CategoryId": 7,
        "Sub Category": "ERP",
        "Sub CategoryId": 10,
        "Child Category": "SAP",
        "Child CategoryId": 11,
        "Tenant": "IT"
      }
    ]
  }
};
const query = {
  "Parent Category": "Hardware",
  "Sub Category": "Router",
  "Child Category": "Cisco"
};

// apply
const matches = match(query, input.OutputObject.SUBROOT);
const reduced = pluck(['Parent CategoryId', 'Sub CategoryId', 'Child CategoryId'], matches);

console.log(reduced);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...