解码从Javascript发送到golang服务器的JSON

时间:2016-10-20 17:51:00

标签: javascript json go decode

我无法解码我从JavaScript文件中获取的JSON(处理请求的服务器是用go编写的)

我已经使用以下JavaScript代码发送请求。

function Connect() {

var data = JSON.stringify({
    Version: "0.1",
    Action: "test",
    Data: {}
});

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
    if (xhr.readyState == XMLHttpRequest.DONE) {
        if(xhr.status >= 200 && xhr.status < 300) {
            console.log(xhr.responseText);
        } else {
            console.warn(xhr);
        }
    }
};
xhr.open("Post", "http://localhost:5252", true);
xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
xhr.send(data);
}

据我所知,这应该可以将JSON发送到服务器。 请求由我的服务器接收,但我无法对其进行解码。

func newRequestFromJSON(jsonData io.Reader) (*Request, error) {
// Decode the JSON to the request value.
decoder := json.NewDecoder(jsonData)

var r Request
err := decoder.Decode(&r)
if err != nil {
    return nil, e.New(err.Error() + " at " + u.GetFile_line())
}

return &r, nil
}

Request结构如下所示。

type Request struct {
Version string
Action string
Data interface{}
}

io.reader获取request.body作为参数。该守则有效,例如我用firefox的HttpRequester插件发送了同样的东西。

我收到了EOF错误,并说该请求为零。我认为请求的主体是空的,但我不确定。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

如果有人遇到同样的问题: 我终于想出了我必须在服务器中做哪些更改才能允许这样的CORS请求。

1. If using Spark DataFrame then ( x and y are DataFrames )
   import org.apache.spark.sql.functions.round 
   val y = x.withColumn("col1", round($"col1", 3))

2. val y = x.rdd.map( x => (x(0)*1000).round / 1000.toDouble )