无法访问json对象密钥

时间:2018-05-03 09:21:46

标签: json angular

我有一个json对象如下:

的Json

{error: false, message: [,…]}

内幕消息:

{convid: "5aeab8a0e5dd7c55942a7ce7", recipient: "Akhil Sindhwani", seen: false, from: "Miti Desai",…}
  

致辞:“5aeab8a0e5dd7c55942a7ce7”来自:“Miti Desai”消息:   “asdsad”收件人:“Akhil Sindhwani”看到:虚假主题:“sasas”   updatedAt:“2018-05-03T07:22:09.367Z”

我在Angular工作,上面是我从http服务获得的响应。

服务功能:

  getUserMessages() {
    console.log("getUserMessages");

    this._mailingService.getMessages()
      .subscribe(conversations => {
        this.messageData = conversations
        if (conversations) {
          console.log( this.messageData);
          this.messageData = conversations



        }


      })
      , error => {
      console.log("Error");

       },
       () => {
        // THIS IS EXECUTED AFTER THE SUBSCRIBE COMPLETES
        console.log( 'this.messageData');
        console.log( this.messageData);

     }
  }

在上面的代码中,我在对话中得到了一个响应,我得到了json对象。 我把那个对象放在消息数据中。

在html中,我尝试解析消息数据如下:

  <div id="messageMenu">
        <ul>
          <li class='msgBody' *ngFor = "let message of messageData.message">

              <div class="msgListingContainer1">
                <div class="senderImg">
                  <img src="../../../../assets/images/profile1.jpg">
                </div>
              </div>
              <div style=" display:inline-block" class="msgListingContainer2">
                <span  style=" display:inline-block" class="senderName">{{message.recipients}}</span>
                <span class="msgTimestamp">5:13pm</span>
                <p class="msgheading"><span>Hey alex pretty cool new track you got..</span></p>
              </div>

          </li>

      </ul>
    </div>

但我收到此错误消息:

  

MessageMenuComponent.html:6 ERROR TypeError:无法读取属性   未定义的'消息'

我试图从json获取一个键,然后使用ngFor指令循环它。这很简单,我以前做过这个。

谁能告诉我我做错了什么?

任何帮助将不胜感激!

Response from API call

更新

不确定它是如何工作的。 没有更改组件文件中的任何内容。

将html更改为:

<div id="messageMenu">
        <ng-container *ngIf="showConversations;else noCnvrstns" >
          <ul>
              <li class='msgBody' *ngFor = "let message of messageData">
                  <div class="msgListingContainer1">
                    <div class="senderImg">
                      <img src="../../../../assets/images/profile2.jpg">
                    </div>
                  </div>
                  <div style=" display:inline-block" class="msgListingContainer2">
                    <span  style=" display:inline-block" class="senderName">{{message.recipient}}</span>
                    <span class="msgTimestamp">{{ message.updatedAt |  date:'hh:mm a' }}</span>
                    <p class="msgheading">{{message.messages}}</p>
                  </div>
              </li>
        </ul>


    </ng-container>
    <ng-template #noCnvrstns>
        <div class="noConversations">No conversations to show</div>
    </ng-template>
    </div>

开始得到回复。

我不明白什么时候消息在json对象的消息键中,然后我怎么能直接从会话中获取它们但是为我工作。

不添加答案,因为问题本身是不明确的。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

在asnyc调用获取数据的情况下,最好使用安全导航?。它不会使角度发生错误。

试试这个 -

 <li class='msgBody' *ngFor = "let message of messageData?.message">

同时在声明类型messageData: any时。

答案 1 :(得分:0)

您的JSON文件格式不正确。

如何阅读here

  

在JSON中,键必须是字符串,用双引号

编写

在键周围插入双引号,这可能会解决问题。