繁体   English   中英

AWS Rust - 将 DynamoDB 结果 JSON 转换为 (web) JSON

[英]AWS Rust - convert DynamoDB result JSON to (web) JSON

目前,我有一个 S3 static 网站,其中包含一个 8822996504788 请求,该请求命中一个 Lambda,它从我的 dynamodb 数据库返回一个项目。 我认为我在这方面非常接近成功。 似乎我需要做的就是将 DynamoDB 版本的 JSON 转换为正常的 JSON,例如通过 inte.net 传递的。

这是我的 Rust Lambda 中的一些内容。

use aws_config::meta::region::RegionProviderChain;
use aws_sdk_dynamodb::model::AttributeValue;
use aws_sdk_dynamodb::Client;
use lambda_runtime::{service_fn, Error as LambdaError, LambdaEvent};
use serde_json::{json, Value};
...
...
let item = client
    .get_item()
    .table_name("example_table")
    .key("example_key", AttributeValue::S(key_value.to_string()))
    .send()
    .await?;

let mapped_value = item.item().unwrap();
let json_value = json!({ "statusCode": 200, "body": format!("{:?}", mapped_value) });
Ok(json_value)

它返回一个正确的响应,但格式为 JSON 的 DynamoDB 版本。这是其中的一个简短示例。

{"items": L([M({"load": N("2"), "name": S("Superlaser"), "item_type": S("Weapon")})])}

因此,当我在前端的 javascript 收到此响应时,它会出错;

Error SyntaxError: Unexpected token 'N', ..."apon_lr": N("10"), ""... is not valid JSON

我进行了一些谷歌搜索并遇到了 Rusoto 和 serde_dynamo,但是我在尝试混合和匹配这些板条箱时遇到了很多麻烦……而且感觉不对? aws_sdk_dynamodb 中没有转换吗?

与这个 StackExchange 问题非常相似,但对于 Rust 而不是 Node.JS 或Python。在 AWS Lambda 中将 DynamoDB 数据格式化为正常的 JSON

我最终做的是结合使用 serde_dynamo::from_item 和 serde_json。 我建立了一个结构..

use serde_derive::{Deserialize, Serialize};
use serde_dynamo::from_item;
use serde_json::{json, Value};

#[derive(Serialize, Deserialize)]
struct S { //just for example
    txt: String,
}

let struc: S = from_item(mapped_value.clone()).expect("Should convert Item to S");
let json_value = serde_json::to_value(struc).expect("Should serialize to JSON");

该结构需要与您从 DynamoDB 获得的 object 的结构相匹配。 如果您要返回一堆物品,应该有一个相应的 serde_dynamo 调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM