是否可以在将数据转换为xml时保持JSON的排序,反之亦然

时间:2014-12-29 16:02:16

标签: java xml json

我需要将XML转换为JSON,然后应用一些业务逻辑后需要重新转换回XML, 但是,当我尝试将XML转换为JSON,然后将JSON重新转换回XML时,我的属性将以不同的顺序获得。

例如关注XML

<breakfast_menu><food><name>Belgian Waffles</name><price>$5.95</price></food></breakfast_menu>

转换为以下JSON

{"breakfast_menu":{"food":{"price":"$5.95","name":"Belgian Waffles"}}}

并重新转换为以下XML

<breakfast_menu><food><price>$5.95</price><name>Belgian Waffles</name></food></breakfast_menu>

由于名称标签被价格标签取代。

是否有任何方法可以保持排序,以便转换和重新转换产生相同的输出。

import org.json.JSONException;
import org.json.JSONObject;

import org.json.XML;

public class XmlToJson {


 public static int PRETTY_PRINT_INDENT_FACTOR = 4;
    public static String TEST_XML_STRING =
            "<breakfast_menu>\n" +
                    "<food>\n" +
                    "<name>Belgian Waffles</name>\n" +
                    "<price>$5.95</price>\n" +
                    "</food>\n" +
                    "</breakfast_menu>";

    public static void main(String[] args) {
        try {
            JSONObject xmlJSONObj = XML.toJSONObject(TEST_XML_STRING);
            String jsonString = xmlJSONObj.toString();
            System.out.println(jsonString);
            System.out.println("================================");
            JSONObject jsonObj = new JSONObject(jsonString);
            String s1 = XML.toString(jsonObj);

            System.out.println(s1);
            s1 = s1.replace("\n", "").replace("\r", "");
            TEST_XML_STRING = TEST_XML_STRING.replace("\n", "").replace("\r", "");
            System.out.println("================================");
            System.out.println(TEST_XML_STRING);
            System.out.println("================================");

            System.out.println(s1.equals(TEST_XML_STRING));



        } catch (JSONException je) {
            System.out.println(je.toString());
        }
    }

}

2 个答案:

答案 0 :(得分:1)

这可能是自然错误的,因为默认情况下JSON的定义是:

An object is an unordered set of name/value pairs.

但是,您可能需要检查读取JSON字符串的JSON.simple库并保持键的顺序

答案 1 :(得分:1)

虽然您可能会使用某些机制来提供某种排序,但JSON并不保证任何特定订单的处理器。如果您正在与某个需要特定订单的流程(并且在您的控制之下)进行交互,我建议您更改该流程,使其符合正常的JSON流程以处理无序输入。