[英]AWS AppSync: How to return valid JSON via DynamoDB
我有一個 AppSync GraphQL API,它對 DynamoDB 進行查詢並返回一個 JSON 字符串,但是在我的響應映射模板中,我使用了此處列出的內置$util.parseJson()
函數 - 但我仍然返回了一個 JSON查詢窗口中以及在我的 React 應用程序中請求數據時的字符串。
Schema 文件,我有一個 AWSJSON 類型的普通 ID 和地址字段。
type Venue {
id: ID!
address: AWSJSON
}
運行突變時,我通常通過快速的JSON.stringify(addressObj)
運行地址對象,並將對象格式化為帶有轉義 \\"\\" 的字符串,這意味着它可以插入到 DynamoDB 中。
請求映射模板
{
"version": "2017-02-28",
"operation": "GetItem",
"key": {
"id": $util.dynamodb.toDynamoDBJson($ctx.args.id),
}
}
響應映射模板
#set($result = $ctx.result)
## address - parse back to JSON
#set($result.address = $util.parseJson($ctx.result.address))
## Return the result
$util.toJson($result)
創建一個新變量然后將值分配給parseJSON
值的想法取自How return JSON object from DynamoDB with appsync? . 因此,如下所示,我正在通過似乎是將其從字符串化 JSON 轉換為對象的正確方法來解析該值 - 但它似乎不起作用。
目前的回應:
{
"data": {
"getVenue": {
"id": "31538150",
"address": "{\"lng\":-1.54511300000001,\"postcode\":\"LS1 5DL\",\"short\":\"New Station St., LS1\",\"lat\":53.795231,\"full\":\"16 New Station St, Leeds LS1 5DL, UK\"}"
}
}
}
而我想要的回應是......
{
"data": {
"getVenue": {
"id": "31538150",
"address": { "lng": -1.54511300000001, "postcode": "LS1 5DL", "short": "New Station St., LS1", "lat": 53.795231, "full": "16 New Station St, Leeds LS1 5DL, UK" }
}
}
}
任何幫助是極大的贊賞!
老問題,但我想我會添加一些注釋......
AWSJSON 是一個字符串值,它將作為 JSON 解析到 DynamoDB 中,並在獲取時再次字符串化。
所以 AppSync 需要一個字符串(字符串化的 JSON)作為輸入,並將返回一個可以用JSON.parse
解析的字符串。
然而,這些數據在存儲在 DynamoDB 之前會被解析。 因此,除了通過 AppSync 單獨查詢 DynamoDB 之外,您還可以像查詢對象一樣查詢它。 與直接輸入 DynamoDB 相同。
在 AppSync 結果中獲取 JSON 的唯一方法是在 GraphQL 中定義每個字段。 有時這可以通過重組數據來實現。 例如,而不是存儲:
{
bob: { age: 34 },
igor: { age: 124 }
}
需要將其字符串化為 AWSJSON 字段。 然而,它可以像這樣重組:
[{
name: 'bob',
age: 34
}, {
name: 'igor',
age: 123
}]
可以在 GraphQL 中定義如下:
type User {
age: Int,
name: String
}
這樣就可以從 GraphQL 中提取特定的值,例如age
,而無需涉及 JSON 解析/字符串化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.