Java 将XML转换为JSON,与FasterXML一起使用的jaxb类存在问题
我需要在运行时使用FasterXML将XML转换为JSON,并使用源XSD从JAXB工具xjc生成bean 我正在使用以下代码Java 将XML转换为JSON,与FasterXML一起使用的jaxb类存在问题,java,json,xml,xml-parsing,Java,Json,Xml,Xml Parsing,我需要在运行时使用FasterXML将XML转换为JSON,并使用源XSD从JAXB工具xjc生成bean 我正在使用以下代码 public static void main(String[] args) { try { Testing tObj=new Testing(); ObjectMapper tester=tObj.createJaxbObjectMapper(); CustomerOrder
public static void main(String[] args) {
try {
Testing tObj=new Testing();
ObjectMapper tester=tObj.createJaxbObjectMapper();
CustomerOrderType data=tester.readValue(TEST_XML_STRING, CustomerOrderType.class);
//ObjectMapper serializr=new ObjectMapper();
//serializr.writeValue(System.out, data);
} catch (Exception je) {
System.out.println(je.toString());
}
}
public ObjectMapper createJaxbObjectMapper()
{
final ObjectMapper mapper = new ObjectMapper();
final TypeFactory typeFactory = TypeFactory.defaultInstance();
final AnnotationIntrospector introspector = new JaxbAnnotationIntrospector(typeFactory);
// make deserializer use JAXB annotations (only)
mapper.getDeserializationConfig().with(introspector);
// make serializer use JAXB annotations (only)
mapper.getSerializationConfig().with(introspector);
return mapper;
}
但我得到一个错误如下
com.fasterxml.jackson.core.JsonParseException: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
at [Source: (String)"<ns1:orderDetail xmlns:ns1="http://www.colt.net/xml/ns/webservice/manord/v1.0"><ns7:Customer_Order_Status xmlns:ns7="http://www.colt.net/xml/ns/cbe/ord/v1.0">New</ns7:Customer_Order_Status><ns8:Order_Creation_Date xmlns:ns8="http://www.colt.net/xml/ns/cbe/ord/v1.0">2018-03-06T09:03:25</ns8:Order_Creation_Date><ns9:Opportunity_Number xmlns:ns9="http://www.colt.net/xml/ns/cbe/ord/v1.0">8798</ns9:Opportunity_Number><ns10:Order_Source xmlns:ns10="http://www.colt.net/xml/ns/cbe/ord/v1.0">eOrder Lite<"[truncated 9232 chars]; line: 1, column: 2]
com.fasterxml.jackson.core.JsonParseException:意外字符(“现成的XML-to-JSON转换器永远不会为您的特定应用程序提供最佳输出。您通常需要应用一些预处理(使用XSLT的XML转换)或JSON的一些后处理
在这种情况下,我建议进行XSLT转换以删除名称空间。现成的XML到JSON转换器永远不会为您的特定应用程序提供最佳输出。您通常需要应用一些预处理(使用XSLT的XML转换)或JSON的一些后处理
在本例中,我建议执行XSLT转换以删除名称空间。看起来您使用的是lib,它非常轻量级,并且不提供从解析的XML标记名中跳过名称空间的可能性
但这可以通过使用更高级的XML/JSON处理库来实现,例如
更新
要将字符串xml
转换为Json:
1) 使用com.fasterxml.jackson.dataformat:jackson-dataformat-xml
lib依赖项
2) 转换顺序类似于:
XmlMapper xmlMapper = new XmlMapper();
MyObject myObj = xmlMapper.readValue(xml, MyObject.class);
ObjectMapper jsonMapper = new ObjectMapper();
String json = jsonMapper.writeValueAsString(myObj);
System.out.println(json);
看起来您正在使用lib,它非常轻量级,不提供从解析的XML标记名中跳过名称空间的可能性
但这可以通过使用更高级的XML/JSON处理库来实现,例如
更新
要将字符串xml
转换为Json:
1) 使用com.fasterxml.jackson.dataformat:jackson-dataformat-xml
lib依赖项
2) 转换顺序类似于:
XmlMapper xmlMapper = new XmlMapper();
MyObject myObj = xmlMapper.readValue(xml, MyObject.class);
ObjectMapper jsonMapper = new ObjectMapper();
String json = jsonMapper.writeValueAsString(myObj);
System.out.println(json);
那是我最初计划做的。。但是在详细查看了源XSD之后,我需要一个更强大的库,现在我将尝试使用FasterXML。感谢我最初计划这么做的。。但是在详细查看了源XSD之后,我需要一个更强大的库,现在我将尝试使用FasterXML。谢谢,那里是一个全新的世界。如果需要一些帮助,我已经更新了FasterXML的问题,JAXBI尝试使用上述代码,但是自定义复杂类型存在一些问题。因此,我必须使用常规jaxb api将流转换为POJO。我能够使用常规ObjectMapper正确地生成json。谢谢你的帮助,那里是一个全新的世界。如果需要一些帮助,我已经更新了FasterXML的问题,JAXBI尝试使用上述代码,但是自定义复杂类型存在一些问题。因此,我必须使用常规jaxb api将流转换为POJO。我能够使用常规ObjectMapper正确地生成json。谢谢你的帮助。我用一个转换序列的例子更新了答案。我用一个转换序列的例子更新了答案。