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

Android Smack接收XML格式的消息我可以将它们更改为JSON吗?,android,xmpp,openfire,asmack,Android,Xmpp,Openfire,Asmack,我正在开发一个android聊天应用程序,使用Openfire作为XMPP的支持服务器,使用smack库作为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."

我正在开发一个android聊天应用程序,使用
Openfire
作为XMPP的支持服务器,使用smack库作为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>
我的问题是:我可以接收JSON格式的消息而不是 XML


当我学习smack和xmpp时,如果我在某些地方出错,请指导我。如果有人发现我错了,请纠正我。

您可以通过Github将消息转换为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());
    }
  }
}

归功于Json,它不是Openfire的回复格式。 当然,您可以用Json将所有Openfire重写为“talk”,但对我来说没有意义

我给你的建议是:

  • 如果您有性能问题,您可以查找Ejabber
  • 如果你需要一个Json,也许Prosody IM有一个插件
  • 如果你不想用XmlPullParser打破你的头脑,试试看 以代替打
  • 如果您对XML没有信心,只需为每一节类型实现一个“toJson”,这样您就有了类似于
    (感谢@Khan)


您将能够使用Json

服务器端开发人员应该使用JSON格式,但不能从android应用程序中执行。没有服务器端开发@ZahidulIslam。我们只是在xampp中有一个数据库,Openfire提供了一切。。!!您真的想接收JSON格式的消息吗?或者您只是想在消息节的
元素(
“日期”:“2016年7月8日”,“时间”:“0:40p.m.”,“正文”:“vhklv”,…“
)中提取JSON?我想接收JSON@jankigadhiya你能帮我吗?事实上,这不是我想要的,我不想将XML转换成JSON,但我需要我的openfire直接用JSON响应。如果不能直接实现,我会尝试一下。谢谢你的努力。。!!很抱歉但是我已经提到了原始帖子的链接,我只举了一个例子。@Khan你能帮我吗@VishalPatoliyaツ 我看过你的问题,但说真的,我不知道smack是如何工作的。我还没有写过openfire。我刚刚在我的电脑上安装了它。请给我一些东西(一些设置之类的东西),可以让我的openfire使用JSON进行对话。如果这是不可能的,那么我将转而使用你的替代方案。非常感谢。如果不大规模重写Openfire,就不可能用Json说话,但正如我所建议的,如果问题只是在客户端使用Json,那么只需扩展自定义节(消息、Iq和状态)来编写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"
   }
}
MyMessage extends Message

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