将JSON字符串转换为Typescript中的JAVASCRIPT对象

时间:2018-06-17 22:14:07

标签: javascript json typescript mapping nodes

大家好我有两个JSON字符串

[{降序:"约翰",编号:" 22",指定:"管理器"}]

另一个JSON字符串

[{名称:"小溪",ID:" 198"作用:"显影剂"}]

所以我需要用第二个JSON文件映射第一个JSON文件

我的输出应该是这样的

[{降序:"小溪",编号:" 198",指定:"显影剂"}]

所以我想在将JSON字符串转换为JAVASCRIPT对象时,我们只需要替换属性..

任何人都可以帮助我 谢谢......

1 个答案:

答案 0 :(得分:0)

您有两种不同的类型,我们可以为它们定义打字稿类型。

type FormatOne = {
  desc: string;
  number: string;
  designation: string;
}

type FormatTwo = {
  name: string;
  ID: string;
  role: string;
}

我们可以创建一个函数来从一种类型映射到另一种类型。

const twoToOne = ({name, ID, role}: FormatTwo): FormatOne => ({
  desc: name,
  number: ID,
  designation: role,
})

从字符串解析 JSON 时,您必须使用 as 断言类型,因为 typescript 不知道类型是什么。我们可以说它将是一个混合了两种类型的数组。

const str = '[{desc:"john",number:"22",designation:"manager"}, {name:"creek",ID:"198",role:"developer"}]';
const arr = JSON.parse(str) as Array<FormatOne | FormatTwo>;

如果你知道你有一个包含所有 FormatTwo 的数组,那么重新格式化它就像调用 array.map(twoToOne) 一样简单。

当你有一个混合数组时,我们需要检查每个元素并有条件地调用转换器。我们使用 'name' in item 作为类型保护来查看 item 是否为 FormatTwo

const fixed = arr.map( item => 
  ('name' in item) ? twoToOne(item) : item
);

这个新数组 fixed 的类型为 FormatOne[],不需要断言。