从 JSON 字符串中提取邮件对象



我从雅虎邮件网络服务中获得了json共鸣。之后,我使用播放 json 库进行了解析。

现在我无法迭代它并构造带有发件人姓名、主题、ccList 等的邮件对象列表。

我尝试构造的邮件对象是:列表(电子邮件(主题,接收日期,正文1,发件人,收件人列表))

我浏览了游戏网站上的文档。但是作为 scala 的学习者很难理解它们。有人可以帮助我如何使用案例类来实现这一点。

响应我从网络服务中得到:

{
    "result": {
        "folder": {
            "folderInfo": {
                "fid": "Sent",
                "name": "Sent"
            },
            "total": 3,
            "unread": 0,
            "size": 943522,
            "isSystem": true
        },
        "total": 3,
        "code": [],
        "message": [
            {
                "mid": "2_0_0_2_3196_ACfai2IAACqmUwNFtgAAAKAUN2U",
                "receivedDate": 1392723382,
                "subject": "test mail",
                "xapparentlyto": "",
                "hasBlockedImages": false,
                "flags": {
                    "isReplied": 0,
                    "isFlagged": 0,
                    "isRead": 1,
                    "isDraft": 0,
                    "isForwarded": 0,
                    "isHam": 0,
                    "isSpam": 0,
                    "hasAttachment": 0,
                    "isRecent": 1,
                    "inAddressBook": 0
                },
                "from": {
                    "email": "rajeevkumar.kallempudi@yahoo.com",
                    "name": "Rajeev Kumar Kallempudi"
                },
                "to": [
                    {
                        "email": "rajeevprasanna@gmail.com",
                        "name": "rajeevprasanna@gmail.com"
                    }
                ],
                "replyto": [
                    {
                        "email": "rajeevkumar.kallempudi@yahoo.com",
                        "name": "Rajeev Kumar Kallempudi"
                    }
                ],
                "cc": [],
                "bcc": [],
                "domainkey": false,
                "messageId": "<1392723382.76715.YahooMailNeo@web160105.mail.bf1.yahoo.com>",
                "inReplyTo": "",
                "references": "",
                "sender": "rajeevkumar.kallempudi@yahoo.com",
                "part": [
                    {
                        "partId": "HEADER",
                        "type": "x-unknown",
                        "subtype": "",
                        "typeParams": "",
                        "disposition": "",
                        "dispParams": "",
                        "encoding": "7bit",
                        "filename": "",
                        "size": 1474,
                        "contentId": "",
                        "isTruncated": false,
                        "hasBlockedImages": false,
                        "referencedInline": false
                    }                     
                ]
            },
            {
                "mid": "2_0_0_2_2463_ACfai2IAAAdpUwM1NwAAAD0sJOA",
                "receivedDate": 1392719159,
                "subject": "passage1",
                "xapparentlyto": "",
                "hasBlockedImages": false,
                "flags": {
                    "isReplied": 0,
                    "isFlagged": 0,
                    "isRead": 1,
                    "isDraft": 0,
                    "isForwarded": 0,
                    "isHam": 0,
                    "isSpam": 0,
                    "hasAttachment": 0,
                    "isRecent": 1,
                    "inAddressBook": 0
                },
                "from": {
                    "email": "rajeevkumar.kallempudi@yahoo.com",
                    "name": "Rajeev Kumar Kallempudi"
                },
                "to": [
                    {
                        "email": "rajeevkumar.kellmpudi@yahoo.com",
                        "name": ""
                    }
                ],
                "replyto": [
                    {
                        "email": "rajeevkumar.kallempudi@yahoo.com",
                        "name": "Rajeev Kumar Kallempudi"
                    }
                ],
                "cc": [],
                "bcc": [],
                "domainkey": false,
                "messageId": "<1392719159.63976.YahooMailNeo@web160106.mail.bf1.yahoo.com>",
                "inReplyTo": "",
                "references": "",
                "sender": "rajeevkumar.kallempudi@yahoo.com",
                "part": [
                    {
                        "partId": "HEADER",
                        "type": "x-unknown",
                        "subtype": "",
                        "typeParams": "",
                        "disposition": "",
                        "dispParams": "",
                        "encoding": "7bit",
                        "filename": "",
                        "size": 1949,
                        "contentId": "",
                        "isTruncated": false,
                        "hasBlockedImages": false,
                        "referencedInline": false
                    },
                    {
                        "partId": "TEXT",
                        "subtype": "alternative",
                        "type": "multipart",
                        "typeParams": "boundary="-827237569-990831377-1392719159=:63976"",
                        "disposition": "",
                        "dispParams": "",
                        "encoding": "7bit",
                        "filename": "",
                        "size": 11623,
                        "contentId": "",
                        "isTruncated": false,
                        "hasBlockedImages": false,
                        "referencedInline": false
                    }                     
                ]
            } 
        ]
    },
    "error": null
}

如果你只是查询雅虎的消息,你不会得到电子邮件的内容,所以你应该使用一个看起来更像这样的查询。 请注意,这将查询帐户的所有消息,包括已读或存档的消息。

select
  message.subject,
  message.receivedDate,
  message.from,
  message.to,
  message.cc,
  message.bcc,
  message.part.text
from ymail.msgcontent
where (fid,mids) in (
  select
    folder.folderInfo.fid,
    mid
  from ymail.messages
)

一旦你有了它,你只需要使用Play文档中描述的JSON选择元素功能。 它应该看起来像这样:

import java.util._
case class EmailMessage(
  subject      : String,
  receivedDate : Date,
  body         : String,
  sender       : String,
  recipients   : List[String]
)
def yahooToEmailMessage(json:JsValue) = {
  val subject = json / "result" / "message" / "subject"
  val body = json / "result" / "message" / "part" / "text"
  val ts = (json / "result" / "message" / "receivedDate").toLong
  val receivedDate = new Date(ts * 1000L)
  val sender = getRecipient(json / "result" / "message" / "to")
  val to  = getRecipients(json / "result" / "message" / "to")
  val cc  = getRecipients(json / "result" / "message" / "cc")
  val bcc = getRecipients(json / "result" / "message" / "bcc")
  val recipients = to ::: cc ::: bcc
  EmailMessage(
    subject,
    receivedDate,
    body,
    sender,
    recipients
  )
}
def getRecipient(recipient:JsValue):List[String] = {
  val name  = recipient / "name"
  val email = recipient / "email"
  name + " <" + email + ">"
}
def getRecipients(array:JsArray):List[String] = {
  array.foldLeft(List[String]()) {
    (list,recipient) => list ::: List(getRecipient(recipient))
  }
}

相关内容

  • 没有找到相关文章

最新更新