JavaScript实现普通对象到NoSQL数据库存储格式的转换
转换逻辑实现
你需要的是适配AWS DynamoDB的AttributeValue存储格式转换,以下是可直接运行的JavaScript实现:
核心转换规则
- 布尔值:封装为
{ BOOL: 原始布尔值 } - 数字值:取整数部分后转为字符串,封装为
{ N: "整数字符串" } - 嵌套对象:递归处理所有子属性后,封装为
{ M: 转换后的子属性集合 } - 可自定义过滤不需要存入数据库的字段(比如示例中的
invalidated字段)
完整代码
// 配置不需要转换的过滤字段 const EXCLUDE_FIELDS = ['invalidated'] function convertToNoSqlFormat(obj) { const result = {} for (const [key, value] of Object.entries(obj)) { // 跳过过滤字段 if (EXCLUDE_FIELDS.includes(key)) continue // 判断值类型做对应转换 if (typeof value === 'boolean') { result[key] = { BOOL: value } } else if (typeof value === 'number') { // 取整数部分转字符串,和示例输出规则一致 result[key] = { N: `${Math.floor(value)}` } } else if (typeof value === 'object' && value !== null && !Array.isArray(value)) { // 嵌套对象递归处理 result[key] = { M: convertToNoSqlFormat(value) } } // 如果需要支持字符串、数组等其他类型可以自行扩展对应规则 } return result } // 测试用例 const originalObj = { "visible": true, "active": true, "invalidated": true, "handles": { "start": { "x": 2094.803738317757, "y": 2038.5794392523367, "highlight": true, "active": false }, "end": { "x": 2487.1775700934586, "y": 2555.364485981309, "highlight": true, "active": false, "moving": false }, "initialRotation": 0, } } console.log(JSON.stringify(convertToNoSqlFormat(originalObj), null, 2))
输出说明
上述代码运行后的输出和你期望的目标格式完全一致,后续如果需要支持字符串、数组、二进制等其他数据类型,只需要在类型判断分支中新增对应转换规则即可,比如字符串对应{ S: 原始字符串 }、数组对应{ L: [转换后的元素集合] }。
内容的提问来源于stack exchange,提问作者Ragu
相关产品推荐
相关产品推荐

