从发布请求中将json解组为数组

时间:2015-12-01 14:30:36

标签: json go

见下面我的

main.go

type Data struct {
        unit []string `json:"unit"`
     }
 func receive(w http.ResponseWriter, r *http.Request) {

  dec := json.NewDecoder(r.Body)
  for {
    var d Data
    if err := dec.Decode(&d); err == io.EOF {
        break
    } else if err != nil {
        log.Println(err)
    }
    log.Printf("%s\n", d.unit)
  }
}

抛出的错误:" json:无法将数组解组为main类型的GO值"

moj.js

 $(function(){
 $('#start').on('click', function(){
 var i;
 var j = 0;

 for (i = 0; i < result.length; i++){

 if(result[i] == null){  
  }else if(result[i]==""){
  }else{
  lookup[j] = result[i];
  j++
  }
 }
 $.ajax({
        type: 'POST',
        url: '/start',
        data: '[{"unit":"'+lookup+'"}]',
        dataType: "json",
        contentType: "application/json",
        success: function () {
           alert("Data posted.")
        },
        error: function(){
          alert('Error posting data.')
        }
    });
  });
});

&#34; json&#34;我发送的内容如下:[{&#34; unit&#34;:&#34; something&#34;}]。

在控制台中我可以看到数据已经像这样发布了。

1 个答案:

答案 0 :(得分:2)

两件事:

  1. 您正在解组一片数据,而不是一块“单位”。
  2. 将'unit'字段设为公共字段,以便通过反射到Decoder
  3. 可见

    请参阅:https://play.golang.org/p/4kfIQTXqYi

    type Data struct {
        Unit string `json:"unit"`
    }
    
    func receive(w http.ResponseWriter, r *http.Request) {
        dec := json.NewDecoder(r.Body)
        for {
            var d []Data
            if err := dec.Decode(&d); err == io.EOF {
                break
            } else if err != nil {
                log.Println(err)
            }
            log.Printf("%s\n", d.Unit)
        }
    }