AWS Rust — преобразование результата DynamoDB JSON в (веб) JSON

В настоящее время у меня есть статический веб-сайт S3 с запросом javascript, который обращается к Lambda, который возвращает элемент из моей базы данных dynamodb. Думаю, я очень близок к успеху в этом. Кажется, все, что мне нужно сделать, это преобразовать версию JSON DynamoDB в обычный JSON, например, передаваемый через Интернет.

Это часть того, что у меня есть в моей 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. Форматирование данных DynamoDB в обычный JSON в AWS Lambda

Почему Python в конце концов умрет
Почему Python в конце концов умрет
Последние 20 лет были действительно хорошими для Python. Он прошел путь от "просто языка сценариев" до основного языка, используемого для написания...
2
0
211
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В итоге я использовал комбинацию 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. Если вы возвращаете кучу элементов, должен быть соответствующий вызов serde_dynamo.

Другие вопросы по теме