Javascript 更改对象中键的数据类型

Javascript 更改对象中键的数据类型,javascript,database,postgresql,Javascript,Database,Postgresql,我有一些从数据库返回的对象。在构建表时,我声明了以下数据类型: festivalId=BIGINT performanceId=BIGINT 开始时间=时间 结束时间=时间 当我想提取一些具有特定performanceId的记录时,我的查询如下所示: 选择performanceId,to_char(startTime,'HH24MI')作为startTime,to_char(endTime,'HH24MI')作为Performance的结束时间,其中festival id=$1 从postgr

我有一些从数据库返回的对象。在构建表时,我声明了以下数据类型:

  • festivalId=BIGINT
  • performanceId=BIGINT
  • 开始时间=时间
  • 结束时间=时间
  • 当我想提取一些具有特定performanceId的记录时,我的查询如下所示:

    选择performanceId,to_char(startTime,'HH24MI')作为startTime,to_char(endTime,'HH24MI')作为Performance的结束时间,其中festival id=$1
    
    从postgresql返回的整个结果被浓缩到一个对象中

    现在的问题是,我的中间件javascript将在每个对象中找到的每个
    performanceId
    (表示每个唯一的performanceId)读取为字符串,而不是整数类型。 e、 g.性能ID 1234567890打印为“1234567890”,而不是1234567890

    是否可以将performanceId输出转换为整数

    在执行sql
    SELECT
    语句时,我尝试将其转换为整数

    选择CAST(performanceId为整数)作为performanceId,选择to_char(startTime,'HH24MI')作为startTime,选择to_char(endTime,'HH24MI')作为Performance的结束时间,其中festival alid=$1
    
    但我意识到它是不同的,因为整数和BIGINT的接受范围不同。

    我不知道我上面的帖子是否有误导性,所以我决定在这里添加一些虚拟输出:

    这是意外输出:

    {
    “结果”:[
    {
    “performanceid”:“9999999999”,
    “开始时间”:“0900”,
    “结束时间”:“1200”
    }
    ]
    }
    
    这是预期输出:

    {
    “结果”:[
    {
    “performanceid”:99999999,
    “开始时间”:“0900”,
    “结束时间”:“1200”
    }
    ]
    }
    
    是相当新的,但它也不是

    因此,您的输出是正确的,因为虽然字符串可以包含任意数量的数字/字符,但值为
    9007199254740991n
    的JSON可能会到处失败

    解决此问题的一种方法是使用
    JSON.parse
    复兴函数,当键为
    performanceid

    JSON.parse(data, (k, v) => k == 'performanceid' ? BigInt(v) : v);
    
    此时,您负责确保浏览器/JS引擎与
    BigInt
    兼容,并最终在不兼容时提供回退(可能将其保留为字符串)

    如果您使用的是
    fetch(data)。那么(b=>b.json())
    您也应该绕过它,使用
    fetch(data)。然后(b=>b.text())。然后(data=>json.parse(data,reviver))
    ,这样您的fetch操作将产生所需的结果