JSON解析多个条件

问题描述 投票:-1回答:1

我竭力要使用JSON.parse从下面的JSON输入获得所需的输出。我使用的JavaScript基本上,我需要根据类别名称每个类别的ID。我的名字是在我的系统条件,现在我需要把所有的IDS 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
javascript json parsing
1个回答
1
投票

我的建议是分割的两个要求。首先得符合查询条件的所有条目,然后摘去你需要的按键。例如:

// 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);
© www.soinside.com 2019 - 2024. All rights reserved.