首页 > 解决方案 > 让 JSON 中的数据成为 Dynamodb 中的自己的属性?

问题描述

每当我向我的 dynamodb 调用 post API 时,所有数据都会存储在一个“内容”属性中。有没有办法让 JSON 结构中的每个属性都有一个单独的属性?

例如,这里是我调用 API 的地方,数据的 JSON 结构在values变量中。

export default (async function submitSite(values) {
  console.log(values);
  createSite(values);
})

function createSite(site) {
  return API.post("sites", "/sites", {
    body: site
  });
}

这是 API 本身的代码:

export async function main(event, context) {
  const data = JSON.parse(event.body);

  console.log(data);
  var site = "IE"+data.siteCounty+data.siteName;
  var siteIdStripped = site.replace(/[aeiou]/g, '');
  var siteId = siteIdStripped.replace(/ /g,'');
  var siteIdFinal = siteId.toUpperCase();

  const params = {
    TableName: "sites",
    Item: {
      userId: event.requestContext.identity.cognitoIdentityId,
      siteId: siteIdFinal,
      content: data,
      createdAt: Date.now()
    }
  };

当我上传时,它的结构是 siteId、userId、content(带有数据对象),创建于。

我希望它显示为 siteId、userId、siteName、siteAddress 等,最后两个是 json 中的索引之一

标签: javascriptreactjsamazon-web-servicesamazon-dynamodb

解决方案


您在content此处显式创建属性:content: data,. 您需要像这样显式设置每个属性:

Item: {
  userId: event.requestContext.identity.cognitoIdentityId,
  siteId: siteIdFinal,
  siteName: data.siteName,
  siteAddress: data.siteAddress,
  createdAt: Date.now()
}

或者,您可以使用对象扩展运算符简化此操作,如下所示:

Item: {
  ...data,
  userId: event.requestContext.identity.cognitoIdentityId,
  siteId: siteIdFinal,
  createdAt: Date.now()
}

推荐阅读