在上传到 Firebase 实时数据库时,如何避免以数字作为键的 JSON 对象被解释为数组?
How to avoid a JSON object with numbers as keys getting interpreted as an array when uploading to Firebase Real Time Database?
我正在使用带有枚举的 Typescript 来创建一些动态对象结构。这些枚举在对象中表示为数字,而不是它们的字符串值,我想保持原样。当我将这些对象上传到 Firebase RTDB 时,这些对象被误解为数组。
打字稿中的枚举示例
enum TableState {
Standby = 0,
Idle,
In_Game,
Maintenance,
}
Javascript 对象我想上传到 Google RTDB
configuration_per_state: {
[TableState.Idle]: {
brightness: 10,
},
[TableState.In_Game]: {
brightness: 10,
duration: 20 * 60, //20 minutes,
}
}
这是以下字符串化的 JSON:
{
"configuration_per_state": {
"1": {
"brightness": 10
},
"2": {
"brightness": 10,
"duration": 120
}
}
}
我现在面临的问题是,当上传到 Firebase 实时数据库时,对象被解释为数组。因此,当我想检索数据时,对象结构已被数据库更改。
上传对象的代码:
const createInitialConfigInDb = (
tableConfig: InitialTableState): Promise<any> => {
return new Promise((resolve, reject) => {
const userId = auth.currentUser?.uid
db.ref(`config/${userId}/general`).set(tableConfig).then((data) => {
//success callback
resolve(data)
}).catch((error) => {
//error callback
reject(error)
})
})
};
上传到数据库并从 RTDB 下载后得到 JSON:
{
"configuration_per_state" : [ null, {
"brightness" : 10,
}, {
"brightness" : 10,
"duration" : 1200,
} ],
}
首先我不明白为什么有一个条目“null”作为第一个数组条目...
其次,有没有一种简单的方法可以避免这种行为?
Firebase 将您的数据解释为数组,它添加的 null
表示数组中索引 0
处没有元素。
无法配置 Firebase 实时数据库的数组 coercion/interpretation。
防止它将您的数据解释为数组的唯一方法是不使用数字键。
我常用的解决方案是在这些键前加上一个简短的常量字符串值。例如:
{
"configuration_per_state" : {
"key_1":
"brightness" : 10,
},
"key_2": {
"brightness" : 10,
"duration" : 1200,
}
}
}
我正在使用带有枚举的 Typescript 来创建一些动态对象结构。这些枚举在对象中表示为数字,而不是它们的字符串值,我想保持原样。当我将这些对象上传到 Firebase RTDB 时,这些对象被误解为数组。
打字稿中的枚举示例
enum TableState {
Standby = 0,
Idle,
In_Game,
Maintenance,
}
Javascript 对象我想上传到 Google RTDB
configuration_per_state: {
[TableState.Idle]: {
brightness: 10,
},
[TableState.In_Game]: {
brightness: 10,
duration: 20 * 60, //20 minutes,
}
}
这是以下字符串化的 JSON:
{
"configuration_per_state": {
"1": {
"brightness": 10
},
"2": {
"brightness": 10,
"duration": 120
}
}
}
我现在面临的问题是,当上传到 Firebase 实时数据库时,对象被解释为数组。因此,当我想检索数据时,对象结构已被数据库更改。
上传对象的代码:
const createInitialConfigInDb = (
tableConfig: InitialTableState): Promise<any> => {
return new Promise((resolve, reject) => {
const userId = auth.currentUser?.uid
db.ref(`config/${userId}/general`).set(tableConfig).then((data) => {
//success callback
resolve(data)
}).catch((error) => {
//error callback
reject(error)
})
})
};
上传到数据库并从 RTDB 下载后得到 JSON:
{
"configuration_per_state" : [ null, {
"brightness" : 10,
}, {
"brightness" : 10,
"duration" : 1200,
} ],
}
首先我不明白为什么有一个条目“null”作为第一个数组条目... 其次,有没有一种简单的方法可以避免这种行为?
Firebase 将您的数据解释为数组,它添加的 null
表示数组中索引 0
处没有元素。
无法配置 Firebase 实时数据库的数组 coercion/interpretation。
防止它将您的数据解释为数组的唯一方法是不使用数字键。
我常用的解决方案是在这些键前加上一个简短的常量字符串值。例如:
{
"configuration_per_state" : {
"key_1":
"brightness" : 10,
},
"key_2": {
"brightness" : 10,
"duration" : 1200,
}
}
}