如何解析多个Json文件,同时在Typescript中保持代码DRY?

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

我的应用程序在Typescript中读取多个Json文件填充选择框,但我想避免湿的(把所有东西都写两次)代码,并保持干的东西(不要重复自己)。我原本为每个json文件都准备了独特的函数,因为它们每个都有不同的值,需要以不同的方式进行解析,但我反而要做一个可以从我的主类中调用的函数,将读取和解析成一个数组并返回。

例如,我的 Countries Json 是这样的。

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

我需要把它解析成一个key -value数组,看起来像这样。

[
    {
        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'
    }
    . . .
]

有没有一种方法可以尽可能的模块化?比如用一个函数来处理?类的数组或接口是最好的解决方案吗?如果是,我如何正确实现它们?

json typescript interface dry
1个回答
1
投票

这个函数可以处理两个数据集。


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);


0
投票

在你的情况下,有两个函数根本不是dry。保持简单,如果你还有2个json,就开始想另一个解决方案。例如

function parseJson1(json) {
  return json.Countries.country.map(v => ({key: v._CountryCode, value: v._CountryCodeDesc}));
}

function parseJson2(json) {
  return json.States.state.map(v => ({key: v._CountryCode, value: v._State}));
}

每个json一个函数,每个函数只有1行。你为什么要把它弄得更复杂呢?

© www.soinside.com 2019 - 2024. All rights reserved.