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
选择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输出转换为整数
在执行sqlSELECT
语句时,我尝试将其转换为整数
选择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操作将产生所需的结果