2017-06-21 31 views
0

我有一个从服务器获取数据的组件和服务器返回一个字符串JSON就像:角2嵌套属性没有被检测到物体 - 打字稿

"{ 
    "name": "John Doe", 
    "age": "5", 
    "addresses": [ 
    {"street": "123 Street", "city": "Main City"} 
    ] 
}" 

所以,当我收到这在我的组件我做的:

let result = JSON.parse(response); //response is the JSON string from server 

然后,因为我需要显示我使用ngFor,以显示它的所有地址。问题是地址不显示。当我甚至只显示地址的长度时,它显示为零。于是,我就在控制台上打印整个对象,也显示地址没有内容,但如果我这样做只打印地址:

console.log(result['addresses']) or console.log(result.addresses); 

它显示这是怪异的内容。所以希望有人能帮助我。

+0

可能需要出示* ngFor片断太多,因为这很可能是哪里的问题的单元。 JSON.parse(响应)看起来很好。 result.address应该是未定义的,因为“地址”不是“地址”。 – Mitch

+0

它听起来像你试图用ngFor结果而不是result.address – LLai

+0

不要发布你的HTML,你用的是在UI中显示这个响应 – Manish

回答

-2

当使用引号将字符串表示形式放入字符串中时,必须使用引号作为字符串分隔符来使用撇号。

'{ 
"name": "John Doe", 
"age": "5", 
"addresses": [ 
    {"street": "123 Street", "city": "Main City"} 
] 
}' 

这应该有效。

+0

他只是用双引号表示它是一个字符串。 – 2017-06-21 05:01:48

+0

有些情况下数据被封装在双引号内,如果这是场景,那么JSON.parse()会引发错误。这就是为什么我建议他使用撇号作为字符串分隔符。 Nvm –

2

好,所以问题是你如何试图访问地址。你的地址是一个数组对象。所以你用*ngFor来显示。你的组件模板应该看起来像这样。

@Component({ 
    selector: 'my-app', 
    template: ` 
    <div> 
     Name:{{data.name}}<br> 
     <label *ngFor="let a of data.addresses"> 
     Street:{{a.street}} 
     City:{{a.city}} 
     </label> 
    </div> 
    `, 
}) 

和你很好去。这里有一个Plunker Demo的相同。

这里是console.log(result.addresses)console.log(result)的结果已经在Plunker中更新过,也可以验证。下面是相同 enter image description here

希望它能帮助:)

+0

正如你可以看到我的json不是一个数组,只有地址是一个数组。而控制台只是我编辑过的错字错误。 – Jed

+0

好的。但我认为你仍然应该发布你的HTML如何试图在UI上显示这些数据。因为你可以在plunker演示中看到它工作正常。你能告诉我为什么这个倒下了吗? – Manish

+0

@Jed根据您的意见更新了答案。而且我们也不能假设HTML是正确的。因为我提供的演示似乎工作得很好。所以这显然意味着你的代码存在一些问题。 – Manish