从单个/多个子项的XML转换Json

时间:2018-04-14 13:40:29

标签: java json xml gson org.json

我正在使用org.json库将XML转换为JSON:

JSONObject json = XML.toJSONObject(xmlData);

我将XML作为API响应。 XML(xmlData)如下所示:

<StudentsTable>
  <Student name = "a" surname = "b" age = "15" />
  <Student name = "x" surname = "y" age = "14" />
</StudentsTable>

当上述XML转换为JSON时,子项'Student'被解析为List。这是预期的。

但是,有时我的XML只能有一个孩子。例如:

<StudentsTable>
  <Student name = "a" surname = "b" age = "15" />
</StudentsTable>

在这种情况下,由于它只有一个子节点,因此它将转换为对象'Student'而不是List。因此,我的JSON解析(使用gson),它期望它是List,在这种情况下失败。

我需要有关如何处理此案例的建议。即使是单身孩子,我希望孩子们能够被列为List!

如果可以更好地处理这个问题,我愿意使用任何其他库进行XML到JSON的转换。

1 个答案:

答案 0 :(得分:1)

获取XML后您的目的是什么?

从该项目的GitHub页面(以及您的具体方法): Click here to read

Sequences of similar elements are represented as JSONArrays

也许你可以自己创建JSONObject。这是一个例子:

public static void main(String[] args) throws IOException {
    String singleStudentXmlData = "<StudentsTable>\n" +
            "  <Student name = \"a\" surname = \"b\" age = \"15\" />\n" +
            "</StudentsTable>";

    JSONObject jsonObject = XML.toJSONObject(singleStudentXmlData);
    try {
        JSONObject students = new JSONObject().put("Students", new JSONArray().put(jsonObject.getJSONObject("StudentsTable").getJSONObject("Student")));
        jsonObject.put("StudentsTable", students);
    } catch (JSONException e){
        // You can continue with your program, this is multi student case (works for your by default library behavior)
    }

    simpleTest(jsonObject);
}

private static void simpleTest(JSONObject modifiedJSONObject){

    String multiStudentXmlData = "<StudentsTable>\n" +
            "  <Student name = \"a\" surname = \"b\" age = \"15\" />\n" +
            "  <Student name = \"a\" surname = \"b\" age = \"15\" />\n" +
            "</StudentsTable>";

    JSONObject multiStudentJSONObject = XML.toJSONObject(multiStudentXmlData);

    assert(modifiedJSONObject == multiStudentJSONObject);
}