Node js http服务器接受POST并接受JSON

Sha*_*rma 5 javascript json node.js

我正在尝试使用 http 包创建一个 Node js 服务器。我只想接收我已经实现的 POST 请求。我面临的问题是我无法正确解析 JSON(我期望附加一个 JSON)。

我尝试使用 JSON.parse 但它不能解析整个 json 内容。它将一些值保留为 [Object],这是错误的。我看到了几个 JSONStream 包,但我不确定在这种情况下如何实现。

server.on('request', function(req, res){
    if(req.method == 'POST')
    {
        var jsonString;

        req.on('data', function (data) {
            jsonString = JSON.parse(data);
        });

        req.on('end', function () {
            serverNext(req, res, jsonString);
        });
    }
    else
    {
        res.writeHead(405, {'Content-type':'application/json'});
        res.write(JSON.stringify({error: "Method not allowed"}, 0, 4));
    }       
    res.end();
});
Run Code Online (Sandbox Code Playgroud)

请求示例:

这里 d = JSON 文件内容。(我在 Python 中这样做是为了发出这个示例请求)

r = requests.post('http://localhost:9001', headers = {'content-type': 'application/json'}, data = json.dumps(d))
Run Code Online (Sandbox Code Playgroud)

注意:我能够正确解析 JSON,但在某些情况下它会显示如下内容:

{ 'Heading': 
   { 'Content': 
      { sometext: 'value',
        List: [Object],         // Wrong
        test: [Array] } } }     // Wrong
Run Code Online (Sandbox Code Playgroud)

更新:

在 serverNext() 中我得到了一些值,例如:

var testReq = Object.keys(jsonData)[0];
var testId = Object.keys(jsonData[testRequest])[0];
var test = jsonData[testRequest][testId]
Run Code Online (Sandbox Code Playgroud)

此外,如果我继续提取值,那么在某个时刻它会遇到 [Objects] 值并崩溃。

sha*_*ncs 2

我可以用dataas重现这个“问题” { "Foo": {"Bar": {"Some data": [43, 32, 44]} } }——它返回以下结果:{ Foo: { Bar: { 'Some data': [Object] } } }

正如OP中提到的,JSON被正确解析,在结果中显示的原因[Object]是:当JavaScript对象返回显示时,它会首先toString()自动转换为String,这将使所有对象(包括数组)如下[Object]所示文本。

要显示真实的内容,JSON.stringify()需要调用。在你的情况下,代码将是:

req.on('end', function () {
    serverNext(req, res, JSON.stringify(jsonString));
});
Run Code Online (Sandbox Code Playgroud)

请注意,最好将变量重命名jsonStringjsonObject.