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

Node.js调用DynamoDB Query接口偶现JSON语法错误问题

Node.js调用DynamoDB Query接口偶现JSON语法错误

使用Node.js连接DynamoDB表,调用Query接口查询数据时,有时能正常返回包含数据的JSON,但偶尔会返回存在语法错误的JSON。

相关代码

let ddb = new AWS.DynamoDB(config)
export const dynamoDb = ddb
export const dynamoClient = new AWS.DynamoDB.DocumentClient({
  service: dynamoDb
})

let params = {
    TableName: auditTable,
    IndexName: 'importId-auditStatus-index',
    KeyConditionExpression: 'importId = :importId and auditStatus = :auditStatus',
    ExpressionAttributeValues: {
      ':importId': importId,
      ':auditStatus' : 'Imported'
    }
  }

let response = await dynamoClient.query(params, function(err, data) {
    if (err) {
      console.log("Error", err);
    } else {
      return data;
    }
  }).promise();
  console.log("response",response)

偶现的错误JSON示例

{
    "Count":117,
    "Items":[
        ... truncated by me ...
        {
            "pricingTemplate":{
                "NULL":true
            },
            "auditId":{
                "S":"7555555_15287101"
            },
            "importId":{
                "S":"8c6976bb-8680-47ce-bcfb-470c8e97740f"
            },
            "auditStatus":{
                "S":"Imported"
            },
            "Id":{
                "S":"420f50cb-3d03-49cb-b1da-1a36aa099e6c"
            },
            "recordType":{
                "S":"currecy_test_tl"
            }
        }
,{"pricingTemplate":{"NULL":true},"auditId":{"S":"7555555_15287164"},"importId":{"S":"8c6976bb-8680-47ce-bcfb-470c8e97740f"},"auditStatus":{"S":"Imported"}7555555_15287206"},"importId":{"S":"8c6976bb-8680-47ce-bcfb-470c8e97740f"},"auditStatus":{"S":"Imported"},"Id":{"S":"e7042719-fa77-4939-9d05-ad41f3bdc7dc"},"recordType":{"S":"currecy_test_tl"}},{"pricingTemplate":{"NULL":true},"auditId":{"S":"7555555_15287155"},"importId":{"S":"8c6976bb-8680-47ce-bcfb-470c8e97740f"},"auditStatus":{"S":"Imported"},"Id":{"S":"bee5d2e3-60cf-4ecf-8249-d25de6e8c28a"},"recordType":{"S":"currecy_test_tl"}},
        {
            "pricingTemplate":{
                "NULL":true
            },
            "auditId":{
                "S":"7555555_15287111"
            },
            "importId":{
                "S":"8c6976bb-8680-47ce-bcfb-470c8e97740f"
            },
            "auditStatus":{
                "S":"Imported"
            },
            "Id":{
                "S":"2161a17f-63c5-4c45-b7b4-9750cc202b23"
            },
            "recordType":{
                "S":"currecy_test_tl"
            }
        }
    ],
    "ScannedCount":117
}

语法错误具体出现在"auditStatus":{"S":"Imported"}7555555_15287206"},位置,此处缺失了"auditId":{"S":"前缀,导致JSON结构断裂。


问题排查与解决

  1. 修复回调与Promise混用问题
    你的代码同时使用了回调函数和.promise(),这会导致逻辑冲突。调用.promise()后不需要再传入回调,直接用await接收结果即可,多余的回调可能引发数据处理异常。修改后的代码:

    let ddb = new AWS.DynamoDB(config)
    export const dynamoDb = ddb
    export const dynamoClient = new AWS.DynamoDB.DocumentClient({
      service: dynamoDb
    })
    
    let params = {
        TableName: auditTable,
        IndexName: 'importId-auditStatus-index',
        KeyConditionExpression: 'importId = :importId and auditStatus = :auditStatus',
        ExpressionAttributeValues: {
          ':importId': importId,
          ':auditStatus' : 'Imported'
        }
      }
    
    try {
      let response = await dynamoClient.query(params).promise();
      console.log("response", response);
    } catch (err) {
      console.log("Error", err);
    }
    
  2. 升级AWS SDK版本
    旧版本的AWS SDK for JavaScript可能存在序列化/反序列化bug,导致返回数据格式异常。将SDK升级到最新稳定版本尝试解决问题。

  3. 验证DynamoDB数据完整性
    检查对应importId下的auditId字段是否存在格式异常的条目,比如缺失引号或结构错误的数据(虽然概率较低,但可以排除数据本身的问题)。

  4. 排查网络传输问题
    偶现的错误可能源于网络传输中的数据截断或篡改,可开启AWS SDK的日志功能,查看原始返回数据是否已经存在异常。

内容的提问来源于stack exchange,提问作者Junaid Rahman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:50:36