AWS AppSync: как вернуть действительный JSON через DynamoDB - PullRequest
0 голосов
/ 16 октября 2018

У меня есть API-интерфейс AppSync GraphQL, который делает запрос к DynamoDB и возвращает строку JSON, однако в своем шаблоне отображения ответов я использую встроенную функцию $util.parseJson(), как указано здесь - но яЯ все еще возвращаю строку JSON в окне запросов и при запросе данных в моем приложении React.

Файл схемы , у меня есть обычное поле ID & Address, которое имеет тип AWSJSON.

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 было взято из Как вернуть объект JSON из DynamoDB с 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" }
    }
  }
}

Любая помощь очень ценится!

...