使用Java将xml转换为json
有没有办法将xml文件转换为json? XML可以是任何结构,因此没有实例化的POJO类。我需要将xml转换为json或Map,没有根节点。使用Java将xml转换为json
例如:
<import name="person">
<item>
<firstName>Emil</firstName>
<lastName>Example</lastName>
<addresses>
<address>
<street>Example Blvd.</street>
</address>
<address>
<street>Example Ave.</street>
</address>
</addresses>
</item>
</import>
预期JSON
{
"firstName": "Emil",
"lastName": "Example",
"addresses": [
{ "street" : "Example Blvd." },
{ "street" : "Example Ave." }
]
}
import org.json.JSONException;
import org.json.JSONObject;
import org.json.XML;
XML.toJSONObject(xml_text).toString()
如果有人想知道如何获得这个库jar,在这里你去:https://mvnrepository.com/artifact/org.json/json/ – 2017-11-10 15:21:41
在此website您找到适合您的任务一些有用的类。
public class Main {
public static int PRETTY_PRINT_INDENT_FACTOR = 4;
public static String TEST_XML_STRING = "Your xml string here";
public static void main(String[] args) {
try {
JSONObject xmlJSONObj = XML.toJSONObject(TEST_XML_STRING);
String jsonPrettyPrintString = xmlJSONObj.toString(PRETTY_PRINT_INDENT_FACTOR);
System.out.println(jsonPrettyPrintString);
} catch (JSONException je) {
System.out.println(je.toString());
}
}
}
链接关闭 – 2017-08-29 14:05:48
是的,链接已关闭,但http://www.json.org /包含一个包含所有可用开源库的“Java”部分来处理JSON。我用这个库:https://mvnrepository.com/artifact/org.json/json/ – 2017-11-10 15:17:37
你可以使用JSON和XML库从json.org
import org.json.JSONObject;
import org.json.XML;
import org.junit.Test;
public class XmlToJsonTest {
private static final String XML_TEXT = "<note>\n" +
"<to>Tove</to>\n" +
"<from>Jani</from>\n" +
"<heading>Reminder</heading>\n" +
"<body>Don't forget me this weekend!</body>\n" +
"</note>";
private static final int PRETTY_PRINT_INDENT_FACTOR = 4;
@Test
public void convert() {
JSONObject xmlJSONObj = XML.toJSONObject(XML_TEXT);
String jsonPrettyPrintString = xmlJSONObj.toString(PRETTY_PRINT_INDENT_FACTOR);
System.out.println(jsonPrettyPrintString);
}
}
来源
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
输出
{"note": {
"heading": "Reminder",
"from": "Jani",
"to": "Tove",
"body": "Don't forget me this weekend!"
}}
这不是我想要的(“没有根节点”)。 – Dominic 2015-02-11 11:10:52
只需删除第一个和最后一个符号) – 2015-02-11 11:53:21
如果你正在使用的Java ,你应该看看我的开源库:unXml。 unXml基本上从Xpaths映射到Json属性。
它在Maven Central上可用。
例
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.nerdforge.unxml.factory.ParsingFactory;
import com.nerdforge.unxml.parsers.Parser;
import org.w3c.dom.Document;
public class ParserExample {
public ObjectNode parseXml(String xml){
Parsing parsing = ParsingFactory.getInstance().create();
Document document = parsing.xml().document(xml);
Parser<ObjectNode> parser = parsing.obj("//item")
.attribute("firstName", "firstName")
.attribute("lastName", "lastName")
.attribute("addresses", parsing.arr("addresses/address", parsing.obj()
.attribute("street", "street")
))
.build();
ObjectNode result = parser.apply(document);
return result;
}
}
它会返回一个JacksonObjectNode
,从您的示例JSON。
存在underscore-lodash库,其中有来自XML和toJson的静态方法。
代码示例:
import com.github.underscore.lodash.$;
import java.util.Map;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class StringTest {
@SuppressWarnings("unchecked")
@Test
public void toXmlFromJson() {
final String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<root>\n"
+ " <FirstItem>1</FirstItem>\n <SecondItem>2</SecondItem>\n</root>";
assertEquals("{\n"
+ " \"root\": {\n"
+ " \"FirstItem\": \"1\",\n"
+ " \"SecondItem\": \"2\"\n"
+ " }\n"
+ "}",
$.toJson((Map<String, Object>) $.fromXml(xml)));
}
}
你听说过SAX和DOM解析器的?使用基本的XML解析应该相当容易。 – Smutje 2015-02-11 10:02:38
没有从XML到JSON的canocical映射。什么是属性或命名空间?包含文本和其他元素的元素是什么? – 2015-02-11 10:08:24
可能的重复[在Java中将XML转换为JSON的最快捷方式](http://stackoverflow.com/questions/1823264/quickest-way-to-convert-xml-to-json-in-java) – Joe 2015-02-11 10:19:54