Как получить данные JSON, отправленные из ajax и разобрать в переменную - PullRequest
0 голосов
/ 27 августа 2018

Я использую jquery для отправки данных ajax json для веб-сервиса golang restful. И хочу проанализировать данные json в моем бэкэнде, используя golang. Вот простой код JavaScript:

    $.ajax({
        url: "http://localhost:8080/persons",
        type: "POST",
        dataType: "json",
        data: {
            "data": '{"firstName": "Hello","lastName": "World"}' 
        },
        success:function (res) {
            console.log(res)
        },
        error: function (err){
            console.log(err)
        }
    })

Затем используйте GetRawData () для получения информации о gin.Context и декодер json для анализа содержимого json,

data, _ := c.GetRawData()
jsonStream := string(data)
dec := json.NewDecoder(strings.NewReader(jsonStream))

t, err := dec.Token()
if err != nil {
    log.Fatal(err)
}

for dec.More() {
    var p Person
    err := dec.Decode(&p)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("Hello %s\n", p.firstName)
}

Готово!

1 Ответ

0 голосов
/ 27 августа 2018

Я не очень знаком с Gin, но чтобы принять application/json данные, используйте gin.Context.BindJSON, чтобы связать значения в запросе.

router.POST("/persons", func(c *gin.Context) {
  var jsonData Member
  if c.BindJSON(&jsonData) == nil {
    fmt.Println(jsonData.first_name + " " + jsonData.last_name)
  } else {
    // handle error

  }
}

Обновление с предложением Питера об экспорте полей:

type Person struct {
    FirstName  string `json:"first_name"`
    LastName   string    `json:"last_name"`
}
...