2016-02-29 202 views
-2

我有一个来自一个HTTP请求以下JSON字符串:JSON解析对象

{ '{firstname:\'Joe\'}': '' } // output of console.log(req.body); 

我试图打印的价值利用到控制台:

console.log(req.body.firstname); 

,但它说,该值未定义。我怎样才能得到名字的价值?

要了解客户是这样做的是如何发送JSON请求:

//angular2 
headers.append('Content-Type', 'application/x-www-form-urlencoded'); 
     this.http.post(
      'http://192.168.1.45:3000/test', 
      JSON.stringify({firstname:'Joe'}), //This is the parameter I want 
      {headers:headers} 
     ) 
+0

它似乎没有验证JSON –

+0

'{firstname:\'Joe \'}'是对象的'key' .. – Rayon

+0

您显示的对象已被解析为JavaScript对象或者它是无效的JSON串。除此之外,':'之前的部分是键(所以你的键是'{firstname:\'Joe''')。它表明答复已经是错误的,或者你在做出错误的事情。 –

回答

0

通过透过JSON.stringify转换数组JSON字符串,然后将字符串转换回数组使用JSON.parse

<html> 
    <head> 
    <script> 
    function gettz(){ 
    var str=JSON.stringify({firstname:'Joe'}); 
    console.log(str); 
    //Parse an object 
    dataObj = JSON.parse(str); 
    // get object property 
     console.log(dataObj.firstname); 
    } 

    </script> 
    </head> 
    <body> 
     <input type="button" id="button" value="PrintJson" onclick="gettz();"> 
    </body> 
    </html> 
+0

为什么OP应该从JavaScript对象中创建JSON字符串,然后将其转换回下一行中的JavaScript对象?为什么不写'dataObj ='{firstname:'Joe'}';'? –

+0

如果@ user2924127想要使用解析json访问对象属性。类似于OOP概念。 –

+0

当你在标题中发送它时,它已经是字符串格式,你需要解析它。在你可以访问它之后。 –

0

当你收到它,你需要先解析响应,因为它作为一个字符串来了,所以做:

var parsedResponse = JSON.parse(req.body); 
console.log(parsedResponse.firstname); //Now you can access the object 
+0

如果'{'{firstname:\'Joe \'}':''}'实际上是'console.log(req.body);'的输出,那么'JSON.parse'会导致'Uncaught SyntaxError :意外的标记'',因为对于JSON,键必须用双引号括起来。 –