我需要将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());
}
}
}
答案 0 :(得分:1)
这可能是自然错误的,因为默认情况下JSON的定义是:
An object is an unordered set of name/value pairs.
但是,您可能需要检查读取JSON字符串的JSON.simple库并保持键的顺序
答案 1 :(得分:1)
虽然您可能会使用某些机制来提供某种排序,但JSON
并不保证任何特定订单的处理器。如果您正在与某个需要特定订单的流程(并且在您的控制之下)进行交互,我建议您更改该流程,使其符合正常的JSON流程以处理无序输入。