javascript JSON数据类型解析为Typescript接口数据类型

zpgglvta  于 2023-05-27  发布在  Java
关注(0)|答案(2)|浏览(221)

如何使用JSON将数据类型转换为数字。解析和齐磊函数?尝试了一些选项和示例,但不确定我在这里做错了什么。背景是我使用的Typescript接口已经定义了类型,但传入的Json文件中所有值都是“”。
我只需要应用从String到Number的转换,不存在其他情况。
JSON输入示例->

{"sub_type": "0", "year": "2023", "peak": "N"}

预期产量

{"sub_type": 0, "year": 2023, "peak": "N"}

我尝试了下面的代码片段来实现它:

let cards: Array<Card> = pt_cards['data'];
    let tstCard: Card = JSON.parse(JSON.stringify(cards[0]), (key, value) => {
        if(!isNaN(value)) {
            return(key: value);
        }
        return value;
    });

或者我应该替换当前的接口声明?

flmtquvp

flmtquvp1#

试试这样:

JSON.parse(jsonString, (key, value) => {

   if (!isNaN(value)) {
      return Number(value);
   }

   return value;
});

仅当值表示数字时,才转换为数字

wgxvkvu9

wgxvkvu92#

这是没有意义的JSON.stringify只是JSON.parse它再次。在typescript playground上验证此示例-

type t_card = {
  sub_type: number
  year: number
  peak: string
}

type t_serialized_card = {
  sub_type: string
  year: string
  peak: string
}

function stringToNumberExn(s: string): number {
  const n = Number.parseInt(s)
  if (Number.isNaN(n))
    throw Error(`stringToNumberExn: ${s} is not a number`)
  return n
}

async function getCards(): Promise<Array<t_card>> {
  // format as returned from backend
  const res: Array<t_serialized_card> = 
    await fetch("/path/to/cards").then(r => r.json())

  // map to desired format 
  return res.map(card => ({
    sub_type: stringToNumberExn(card.sub_type),
    year: stringToNumberExn(card.year),
    peak: card.peak
  }))
}

相关问题