首页 > 解决方案 > 如何在 Typescript 中保持代码 DRY 的同时解析多个 Json 文件?

问题描述

我的应用程序正在读取 Typescript 中的多个 Json 文件填充选择框,但我想避免潮湿(将所有内容写两次)代码并保持干燥(不要重复自己)。我最初对每个 json 文件都有唯一的函数,因为它们每个都有不同的值并且需要以不同的方式解析,但我改为创建一个可以从我的主类调用的函数,该函数将读取并解析为数组和返回。

例如,我的国家 Json 如下所示:

{
  "Countries": {
    "country": [
      {
        "_CountrySEQ": "0",
        "_CountryCodeDesc": "UNITED STATES",
        "_CountryCode": "USA"
      },
      {
        "_CountrySEQ": "1",
        "_CountryCodeDesc": "CANADA",
        "_CountryCode": "CAN"
      },
      , , ,
    }
}

我需要将其解析为键/值数组,如下所示:

[
    {
        key:'USA',
        value:'UNITED STATES'
    },
    {
        key:'CAN',
        value:'CANADA'
    }
    . . .
]

但我有一个看起来像这样的 statesjson:

    {
      "States": {
        "state": [
          {
            "_State": "(cantons) Aargau",
            "_CountryCode": "CHE"
          },
          {
            "_State": "Abruzzi",
            "_CountryCode": "ITA"
          }
          . . .
       ]
     }
   }

并且需要解析出来看起来像这样:

[
    {
        key:'CHE',
        value:'(cantons) Aargau'
    },
    {
        key:'ITA',
        value:'Abruzzi'
    }
    . . .
]

有没有办法尽可能做到模块化?像一个函数来处理这个?类或接口数组是最佳解决方案吗?如果是这样,我该如何正确实施它们?

标签: jsontypescriptinterfacedry

解决方案


此函数处理两个数据集。


const parser = (dataset) => {
  const [first, second, index1, index2] = 
    dataset.Countries ? 
    ["Countries", "country", 2, 1] : ["States", "state", 0, 1];
  return dataset[first][second].map(item => {
    return {
      key1: Object.values(item)[index1],
      key2: Object.values(item)[index2],
    }
  });
};

parser(Countries);
parser(States);


推荐阅读