Как разобрать json сообщение

Я хочу опубликовать данные 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 ответа

Решение

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

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)
}

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
}

Если вы используете 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)
}
Другие вопросы по тегам