我正在使用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的转换。
答案 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);
}