簡體   English   中英

AWS AppSync:如何通過 DynamoDB 返回有效的 JSON

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM