/ / Retornar JSON no Go - amazon-web-services, ir, lambda

Retornar JSON no Go - amazon-web-services, ir, lambda

Como obter JSON de volta do golang sem que ele seja codificado como uma string? estou usando este projeto para embrulhar o código em python para que eu possa executá-lo em uma função AWS lambda.

Minha questão é que, se eu retornar json.Marshal(obj) ou string(json.Marshal(obj)) Ou recebo o json codificado em base64 ou uma representação de string (por ex. "{"bar": "foo"}"). Essa não é uma resposta apropriada se você estiver usando o gateway de API da AWS, pois espera que o json puro seja o caso se você retornasse um objeto json no Node.js.

Aqui está o meu código:

package main

import "C"

import (
"encoding/json"
"github.com/eawsy/aws-lambda-go-core/service/lambda/runtime"
)

type Response struct {
StatusCode  int       `json:"statusCode"`
Headers     map[string]string  `json:"headers"`
Body        string    `json:"body"`
}

func Handle(evt json.RawMessage, ctx *runtime.Context) (interface{}, error) {
res := &Response{
StatusCode: 1,
Headers: map[string]string{"Content-Type": "application/json"},
Body: "Hello World",
}
content, _ := json.Marshal(res)
return string(content), nil
}

Aqui está o resultado que recebo da AWS:

insira a descrição da imagem aqui

Respostas:

1 para resposta № 1

https://play.golang.org/p/l2nrhG9lOA

Parece que a interface {} tipo de retorno é oculprint. Forçar isso a uma string retorna um valor mais parecido com JSON. Ter um tipo de retorno {} de retorno da interface me faz pensar que alguma outra coisa está esperando um valor de retorno estruturado ou empacotado. Perseguir a interface {} ou forçar uma seqüência e você deve ser bom.


0 para resposta № 2

json.Marshal retorna uma string JSON pura. Parece que você está imprimindo com %q. Vejo https://play.golang.org/p/skvAfk-frO.


0 para resposta № 3

Desde o AWS Lambda agora suporta oficialmente Go, aqui está um exemplo revisado.

package main

import (
"github.com/aws/aws-lambda-go/lambda"
)

// Response ...
type Response struct {
StatusCode int               `json:"statusCode"`
Headers    map[string]string `json:"headers"`
Body       string            `json:"body"`
}

// Handle ...
func Handle() (Response, error) {
return Response{
StatusCode: 1,
Headers:    map[string]string{"Content-Type": "application/json"},
Body:       "Hello World",
},
nil
}

func main() {
lambda.Start(Handle)
}