Как разобрать json сообщение - PullRequest
0 голосов
/ 02 декабря 2018

Я хочу опубликовать данные json на Go api, но я не могу разобрать json в Go

код JavaScript:

data= {"user":{"username":"admin","password":"123"},"profile":{"firstname":"morteza","lastname":"khadem","files":["/temp/a.jpg","/temp/b.jpg"]}}

$.post('/parse-json', data, function () {
    alert('success');
});

в php получить данные очень просто ($ _REQUEST ['user'] ['firstname']) но в Go другое

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

Если вы используете iris Framework, вы можете использовать функцию ReadJSON следующим образом:

func serve(context context.Context){
    var request map[string]interface{}
    context.ReadJSON(request)
    username:=request["user"].(map[string]string)["username"]
    fmt.Println(username)
}
0 голосов
/ 06 декабря 2018

Теперь я использую этот код:

type Merchant struct{}

func (*Merchant) Register(context context.Context){
    type registerRequestData struct{
        Merchant models.MrtMerchant `json:"merchant"`
        User models2.UsrUser `json:"user"`
        Profile models2.UsrUserProfile `json:"profile"`
        Branch models.MrtMerchantBranch `json:"branch"`
    }
    var request registerRequestData
    if err:=context.ReadJSON(&request);err!=nil{
        panic(err)
    }

    fmt.Printf("%+v\n",request)
}
0 голосов
/ 02 декабря 2018

GO отличается от PHP и JS.Вместо того, чтобы быть простым в использовании, он нацелен на то, чтобы быть явным и надежным.

Для анализа тела JSON в запросе мы должны иметь строгое определение структуры типа для описания структуры, которая получает полезную нагрузку.Вот как мы можем контролировать поля, которые должны поддерживаться.Это важно, поскольку каждое поле имеет свой собственный тип, и синтаксический анализ не выполняется, если строка из запроса не соответствует этому типу.

type RequestBody struct {
    User   User  `json:"user"`
    Profile Profile `json:"profile"`
}

type User struct {
    UserName   string  `json:"username"`
    Password string `json:"password"`
}

type Profile struct {
    FirstName   string  `json:"firstname"`
    LastName string `json:"lastname"`
    Files []string `json:"files"`
}


func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    decoder := json.NewDecoder(r.Body)
    var req RequestBody
    err := decoder.Decode(&req)
    if err != nil {
        // log error and return 400 to caller
        return
    }

    // Use req
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...