节点js http服务器接受POST并接受JSON

时间:2017-08-26 07:37:18

标签: javascript json node.js

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

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

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

请求示例:

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

{ 'Heading': 
   { 'Content': 
      { sometext: 'value',
        List: [Object],         // Wrong
        test: [Array] } } }     // Wrong

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

var testReq = Object.keys(jsonData)[0];
var testId = Object.keys(jsonData[testRequest])[0];
var test = jsonData[testRequest][testId]

更新

在serverNext()内部,我得到的值很少,如:

{{1}}

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

1 个答案:

答案 0 :(得分:2)

我可以使用data将此“问题”重现为{ "Foo": {"Bar": {"Some data": [43, 32, 44]} } } - 它会返回以下结果:{ Foo: { Bar: { 'Some data': [Object] } } }

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

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

req.on('end', function () {
    serverNext(req, res, JSON.stringify(jsonString));
});

请注意,最好将变量jsonString重命名为jsonObject