Как разобрать 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)
}