Я хочу преобразовать XML в JSON. Пример: преобразовать приведенный ниже xml в указанный json.
<header>
<students>
<info>
<name>student1</name>
<class>2</class>
</info>
<info>
<name>student2</name>
<class>3</class>
</info>
</students>
</header>
JSON:
{
"header": {
"students": [
{
"name": "student1",
"class": "2"
},
{
"name": "student2",
"class": "3"
}
]
}
}
Вопрос в том, как преобразовать элемент в массив?
Вы можете увидеть следующую ссылку stackoverflow.com/questions/1823264/…
Используйте библиотеку XML для чтения XML и библиотеку JSON для записи JSON. Хотя существует множество инструментов, обещающих преобразование JSON / XML, они будут делать это, используя свои собственные соглашения. Если у вас есть собственная цель относительно того, каким должен быть результирующий JSON с учетом входного XML, тогда их соглашения не будут работать для вас, и вам просто нужно самостоятельно разрешить оба формата.
может кто подскажет решение с помощью xsl. Я пытался использовать тот, который указан по этой ссылке: bjelic.net/2012/08/01/coding/convert-xml-to-json-using-xslt. работает нормально. за исключением того, что он может обнаруживать массив xml только тогда, когда в массиве есть несколько элементов. Если в массиве есть только один элемент, при преобразовании в json он не рассматривается как массив
Сообщите мне, работает ли мой отвечать для вас.




Я попытался создать Джейсона из добавленной вами строки xml. использовал C# и смог получить файл Джейсона. Вам следует добавить в свой проект пакет nuget Newtonsoft.Json.
public void xmlToJason()
{
string xml = @"<header>
<students>
<info>
<name>student1</name>
<class>2</class>
</info>
<info>
<name>student2</name>
<class>3</class>
</info>
</students>
</header>";
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
string json = JsonConvert.SerializeXmlNode(doc);
Console.WriteLine(json);
}
Это хорошо и все такое, но OP упоминает Java.
Вы можете использовать библиотеку org.json для преобразования строки xml в объект json.
Пример программы:
import org.json.me.JSONException;
import org.json.me.JSONObject;
import org.json.me.util.XML;
public class XmlToJson {
public static void main(String args[]) throws JSONException
{
String sampleXML = "<COLLEGE><STUDENT><NAME>MACK</NAME><MARKS>90</MARKS></STUDENT><STUDENT><NAME>JACK</NAME><MARKS>82</MARKS></STUDENT></COLLEGE>";
JSONObject jsonObject = new JSONObject(XML.toJSONObject(sampleXML).toString());
System.out.println("XML: "+sampleXML);
System.out.println("JSON: "+jsonObject);
}
}
Пример вывода:
XML: <COLLEGE>
<STUDENT>
<NAME>MACK</NAME>
<MARKS>90</MARKS>
</STUDENT>
<STUDENT>
<NAME>JACK</NAME>
<MARKS>82</MARKS>
</STUDENT>
</COLLEGE>
JSON: {"COLLEGE": {
"STUDENT": [
{
"MARKS": "90",
"NAME": "MACK"
},
{
"MARKS": "82",
"NAME": "JACK"
}
]
}
}
Я сделал преобразование, используя xslt, предоставленный по ссылке: https://www.bjelic.net/2012/08/01/coding/convert-xml-to-json-using-xslt/
Проблема, с которой я столкнулся, заключалась в том, что этот xslt преобразует массив xml в массив json только при наличии нескольких элементов xml с тем же именем. Если в массиве есть только один элемент xml, он не преобразует его в массив JSON. Я решил это, отредактировав xsl, используя свое собственное условие, в котором я проверяю имя элемента массива, который мне нужен, и проверяю, равен ли счетчик нулю для того же самого, а затем добавляю '[' и ']' для этого условия.
Добавьте в свое приложение следующую зависимость:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20180813</version>
</dependency>
Он предоставляет довольно простой способ конвертировать XML-документ в JSON-документ:
String xml = "<header>\n" +
" <students>\n" +
" <info>\n" +
" <name>student1</name>\n" +
" <class>2</class>\n" +
" </info>\n" +
" <info>\n" +
" <name>student2</name>\n" +
" <class>3</class>\n" +
" </info>\n" +
" </students>\n" +
"</header>";
JSONObject json = XML.toJSONObject(xml);
System.out.println(json);
Результатом будет:
{"header":{"students":{"info":[{"name":"student1","class":2},{"name":"student2","class":3}]}}}
Затем можно произвести некоторые манипуляции:
JSONArray info = json.getJSONObject("header").getJSONObject("students").getJSONArray("info");
json.getJSONObject("header").put("students", info);
System.out.println(json);
И у вас будет желаемый результат:
{"header":{"students":[{"name":"student1","class":2},{"name":"student2","class":3}]}}
Вы можете следить за этим novixys.com/blog/convert-xml-json.