[英]Return nested JSON in AWS AppSync query
通常,我對AppSync(和GraphQL)還很陌生,但是將解析器連接到DynamoDB表時遇到了一個奇怪的問題。 具體來說,我們為商品的其中一個屬性擁有一個嵌套的Map結構,該結構是任意構造的(其復雜性和形式取決於父項目的類型),有點像這樣:
"item" : {
"name": "something",
"country": "somewhere",
"data" : {
"nest-level-1a": {
"attr1a" : "foo",
"attr1b" : "bar",
"nest-level-2" : {
"attr2a": "something else",
"attr2b": [
"some list element",
"and another, for good measure"
]
}
}
},
"cardType": "someType"
}
我們隨附的GraphQL類型如下:
type Item {
name: String!
country: String!
cardType: String!
data: AWSJSON! ## note: it was originally String!
}
當我們查詢商品時,我們得到以下響應:
{
"data": {
"genericItemQuery": {
"name": "info/en/usa/bra/visa",
"country": "USA:BRA",
"cardType": "visa",
"data": "{\"tourist\":{\"reqs\":{\"sourceURL\":\"https://travel.state.gov/content/passports/en/country/brazil.html\",\"visaFree\":false,\"type\":\"eVisa required\",\"stayLimit\":\"30 days from date of entry\"},\"pages\":\"One page per stamp required\"}}"
}}}
問題是我們似乎無法讓Item.data
字段解析器返回JSON對象(即使在通用查詢解析器的頂部將單獨的字段級解析器附加到該對象)也是如此。 它總是返回一個String,而且很奇怪,如果我們將期望的字段類型更改為String!,則響應將用=
替換data中的所有:
。 我們已嘗試使用響應解析器進行所有操作,包括建議如何使用appsync從DynamoDB返回JSON對象? ,但我們現在完全陷入困境。
在上述帖子中的任何建議均未奏效后,當前用於查詢的響應解析器已恢復為標准響應:
## 'Before' response mapping template on genericItemQuery query; same result as the 'After' listed below **
#set($result = $ctx.result)
#set($result.data = $util.parseJson($ctx.result.data))
$util.toJson($result)
## 'After' response mapping template **
$util.toJson($ctx.result)
我們試圖避免需要為data
每個嵌套級別包括支持類型的情況(因為它根據父項類型而變化,並且在我給出的示例中它可以具有三層或四層),我們認為將模式類型更改為AWSJSON!
會成功的 不過,我開始擔心無法解決重建基礎架構的問題。 任何相反的建議都會有所幫助!
PS,我已經在CloudWatch日志中注意到,在context.result.data
響應字段下存在適當的JSON響應,但是不知何故,下面的transformedTemplate
(再次發現,考慮到我們不應用任何映射模板,這很不尋常,將結果轉換為有效的JSON):
"arn": ...
"transformedTemplate": "{data={tourist={reqs={sourceURL=https://travel.state.gov/content/passports/en/country/brazil.html, visaFree=false, type=eVisa required, stayLimit=30 days from date of entry}, pages=One page per stamp required}}, resIds=USA:BRA, cardType=visa, id=info/en/usa/bra/visa}",
"context": ...
對於冗長的問題,我深表歉意,但我很沮喪。
您可以嘗試為包含所有可能字段的數據字段創建類型,然后將字段解析為與父類型對應的字段,或者嘗試實現graphQL接口
AWSJSON是JSON字符串類型,因此您將始終獲取字符串值(這是您的類型定義必須遵守的內容)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.