Smack接收XML格式的消息我可以将它们更改为JSON吗?

时间:2016-07-08 07:16:44

标签: android xmpp openfire asmack

我正在开发一个Android聊天应用程序,使用Openfire作为XMPP的支持服务器,并将库作为XMPP的Android实现。

事情进展顺利。直到我找到另一个用户收到的消息。格式如下:

<message to="rajesh2@peacock-hp" id="0mpqe-10" type="chat" from="rajesh1@peacock-hp/Smack">
   <body>{"Date":"8 Jul 2016","Time":"0:40p.m.","body":" vhklv","isMine":true,"msgid":"909-08","receiver":"rajesh2","sender":"rajesh1","senderName":"rajesh1"}</body>
   <thread>06ed73bb-21ad-4276-80cb-0ea4fc9d9dfb</thread>
</message>

正在接收消息的我的听众:

private class MMessageListener implements ChatMessageListener {

    public MMessageListener(Context contxt) {
    }

    @Override
    public void processMessage(final org.jivesoftware.smack.chat.Chat chat,
                               final Message message) {
        Log.i("MyXMPP_MESSAGE_LISTENER", "Xmpp message received: '"
                + message);

    }

}

我的问题是:我能否以JSON格式收到此邮件,而不是  XML ??

当我正在学习smack和xmpp时,如果我在某些地方出错,请指导我。如果你们中的任何一个发现我错了,请纠正我。

2 个答案:

答案 0 :(得分:1)

您可以在Github上通过a project将消息转换为JSON格式。

示例:

public class Main {

  public static int PRETTY_PRINT_INDENT_FACTOR = 4;
  public static String TEST_XML_STRING =
    "<?xml version=\"1.0\" ?><test attrib=\"moretest\">Turn this to JSON</test>";

  public static void main(String[] args) {
    try {
        JSONObject xmlJSONObj = XML.toJSONObject(TEST_XML_STRING);
        String jsonPrettyPrintString = xmlJSONObj.toString(PRETTY_PRINT_INDENT_FACTOR);
        System.out.println(jsonPrettyPrintString);
    } catch (JSONException je) {
        System.out.println(je.toString());
    }
  }
}

输出是:

{
  "test": {
     "attrib": "moretest",
     "content": "Turn this to JSON"
   }
}

信用转到Quickest way to convert XML to JSON in Java

答案 1 :(得分:1)

Json它不是Openfire的回复格式。 当然,您可以将所有Openfire重写为&#34; talk&#34;在Json,但对我来说没有任何意义。

我建议你:

  • 如果您遇到性能问题,可以为Ejabber看可能
  • 如果您需要Json,可能 Prosody IM有一个插件
  • 如果你不想用XmlPullParser打破头脑,试一试 以Bubbler替代Smack。
  • 如果您对XML没有信心,只需实施一个&#34; toJson&#34;对于每种Stanza类型,所以你会有类似的东西 (感谢@Khan)
MyMessage extends Message

public String toJson()
{
JSONObject xmlJSONObj = XML.toJSONObject(this.toXML());
        String jsonPrettyPrintString = xmlJSONObj.toString(PRETTY_PRINT_INDENT_FACTOR);
}

你可以使用Json。