我有一些从数据库返回的对象。 当我构建我的表时,这些是我声明的dType:
当我想用特定的performanceId提取一些记录时,我的查询如下所示:
SELECT performanceId, to_char(startTime, 'HH24MI') AS startTime, to_char(endTime, 'HH24MI') AS endTime FROM Performance WHERE festivalId = $1
并将从postgresql返回的整个结果串联到一个对象中。
现在的问题是,用于中间件的javascript正在将每个对象中的每个performanceId
(意味着每个唯一的performanceId)作为字符串而不是整数类型读取。 例如,performanceId 1234567890打印为“1234567890”而不是1234567890。
我可以将performanceId输出转换为整数吗?
我尝试在执行sqlselect
语句时将其转换为整数,
SELECT CAST(performanceId AS INTEGER) AS performanceId, to_char(startTime, 'HH24MI') AS startTime, to_char(endTime, 'HH24MI') AS endTime FROM Performance WHERE festivalId = $1
但我意识到它是不同的,因为INTEGER和Bigint有不同的接受范围。
null
我不知道我上面的帖子有没有误导,所以我决定在这里放一些虚设输出:
这是意外输出:
{
"result": [
{
"performanceid": "9999999999",
"starttime": "0900",
"endtime": "1200"
}
]
}
这是预期的输出:
{
"result": [
{
"performanceid": 999999999,
"starttime": "0900",
"endtime": "1200"
}
]
}
JS BigInt是相当新的,但它也不是JSON标准的一部分。
因此,您的输出是正确的,因为虽然字符串可以包含任意数量的数字/字符,但以9007199254740991N
为值的JSON可能会到处失败。
解决这个问题的一种方法是使用json.parse
恢复函数,当键为PerformanceID
时,返回您想要的任何内容
JSON.parse(data, (k, v) => k == 'performanceid' ? BigInt(v) : v);
此时,您负责确保Browser/JS引擎与bigint
兼容,如果不兼容,则最终提供一个回退(可能将其保留为字符串)。
如果您正在使用fetch(data)。then(b=>b.json())
,那么您也应该绕过它而使用fetch(data)。then(b=>b.text())。then(data=>json.parse(data,reviver))
,这样您的fetch操作将产生所需的结果。