2015-12-07 4 views
3

Я новичок, чтобы попытаться получить ответ JSON на маршруте.JSON Response in Beego Controller

У меня есть контроллер, определенный как таковой.

package controllers 

import (
    "github.com/astaxie/beego" 
) 

type ErrorController struct { 
    beego.Controller 
} 

type ErrorJson struct { 
    s string 
    d string 
} 

func (this *ErrorController) Get() { 

    var responseJson ErrorJson 
    responseJson = ErrorJson{ 
     s: "asdf", 
     d: "qwer", 
    } 

    this.Data["json"] = responseJson 
    this.ServeJson() 
} 

Мой маршрутизатор определяется как

beego.Router("/api", &controllers.ErrorController{}) 

Когда я посещаю маршрут, я получаю пустой объект JSON без каких-либо свойств.

{} 

Если я заменил json struct на строку, я получаю ответ. Поэтому beego знает о контроллере и методе.

this.Data["json"] = "Hello World" 

Что я делаю неправильно?

+1

Возможный дубликат [Go json.Marshal (STRUCT) возвращает "{}"] (http://stackoverflow.com/questions/26327391/go-json-marshalstruct-returns) –

+0

Тот же самый вопрос здесь: https: //stackoverflow.com/questions/8270816/converting-go-struct-to-json –

ответ

4

Необходимо заполнить поля в ErrorJson, начав имя с символом верхнего регистра. Используйте теги полей, чтобы указать имена нижнего регистра на выходе.

type ErrorJson struct { 
    S string `json:"s"` 
    D string `json:"d"` 
} 

Пакет encoding/json и аналогичные пакеты игнорируют невыполненные поля.

1

s & d, низкий регистр в голанге не является видимым.