You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NodeJS中解析DynamoDB嵌套JSON并提取指定Type的Filter对象

从DynamoDB嵌套JSON中提取指定Filter对象

我在DynamoDB中存储了结构复杂的嵌套JSON数据,想要从中提取特定Type对应的Filter对象及其值。比如当Type为macBook时,返回包含PRO和AIR的Filter对象。目前用Node.js解析时无法获取目标Filter对象,附上JSON数据和product.js代码,求解决方法。

JSON数据

{
  "ProductType": {
    "S": "Apple"
  },
  "Type": {
    "M": {
      "iPhone": {
        "M": {
          "Filter": {
            "M": {
              "model": {
                "SS": [
                  "X", "XS"
                ]
              }
            }
          }
        }
      },
      "macBook": {
        "M": {
          "Filter": {
            "M": {
              "model": {
                "SS": [
                  "PRO", "AIR"
                ]
              }
            }
          }
        }
      }
    }
  }
}

product.js代码

const AWS = require('aws-sdk');

var dynamodb = new AWS.DynamoDB({
    region: process.env.AWS_REGION,
});

const getModel = function (productType) {
    return new Promise((resolve, reject) => {
        var params = {
            Key: {
                "ProductType": {
                    S: productType
                }
            },
            TableName: 'product'
        };
        dynamodb.getItem(params, function (err, data) {
            if (err) reject(err, err.stack);
            else {
                console.log("data: " + Object.keys(data));
                let product = data.Item.ProductType.S;
                let filterModel = data.Item.Type.M
                console.log(filterModel);
            }
        });
    });
}

getModel('Apple')

解决方法

DynamoDB返回的原生数据带有类型标识(如S、M、SS),需要逐层解析这些嵌套结构才能拿到目标Filter对象。以下是修改后的代码,支持提取指定Type对应的Filter:

const AWS = require('aws-sdk');

var dynamodb = new AWS.DynamoDB({
    region: process.env.AWS_REGION,
});

const getModel = function (productType, targetType) {
    return new Promise((resolve, reject) => {
        var params = {
            Key: {
                "ProductType": {
                    S: productType
                }
            },
            TableName: 'product'
        };
        dynamodb.getItem(params, function (err, data) {
            if (err) return reject(err);
            if (!data.Item) return resolve(null);

            // 逐层解析嵌套的DynamoDB结构
            const typeMap = data.Item.Type.M;
            const targetProduct = typeMap[targetType]?.M;
            
            if (!targetProduct) return resolve(null);
            
            const filterData = targetProduct.Filter.M;
            // 提取Filter对象,直接取SS类型的数组值
            const filter = {
                model: filterData.model.SS
            };
            
            resolve(filter);
        });
    });
}

// 调用示例:获取Apple分类下macBook的Filter对象
getModel('Apple', 'macBook')
    .then(filter => console.log('提取到的Filter对象:', filter))
    .catch(err => console.error('查询错误:', err));

代码说明

  • 新增targetType参数,可灵活指定要提取的产品类型(如macBook)
  • 使用可选链操作符?.避免因目标类型不存在导致的报错
  • 直接解析DynamoDB的类型标识:M对应嵌套对象,SS对应字符串数组,最终返回格式化后的Filter对象
  • 增加了数据不存在、目标类型不存在等异常情况的处理

内容的提问来源于stack exchange,提问作者Brady Maf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 20:09:23