我使用的是Java8和(fasterjackson)Jackson 2.8.1。
我有一个xml,我需要用Java转换成json。xml结构如下所示:
<Input>
<ns0:order>
<ns0:lineItemList>
<ns0:lineItem>
<ns0:lineItemType>
<ns0:orderID>234</ns0:orderID>
<ns0:shipmentID>1</ns0:shipmentID>
<ns0:lineID>1</ns0:lineID>
<ns0:upc>123</ns0:upc>
<ns0:quantity>1</ns0:quantity>
<ns0:retailPrice>14</ns0:retailPrice>
</ns0:lineItemType>
</ns0:lineItem>
</ns0:lineItemList>
</ns0:order>
</Input>
我选择Jackson从xml反序列化到java,然后从java序列化到JSON。目标json需要解压缩“LineItem”和“LineItemType”以获得类似于以下内容的json:
{
"input" : {
"order" : {
"lineItemList" : [ {
"upc" : 123,
"quantity" : 1,
"retailPrice" : 14,
"orderID" : 234,
"shipmentID" : 1,
"lineID" : 1
} ]
}
}
}
@JacksonXmlProperty(localName="lineItemList")
@JsonProperty("lineItemList")
List<LineItem> lineItems;
@JacksonXmlProperty(localName="lineItemType")
@JsonUnwrapped
LineItemType lineItemType;
...
@JacksonXmlProperty(localName="orderID")
@JsonProperty("orderID")
String orderId;
@JacksonXmlProperty(localName="lineID")
@JsonProperty("lineID")
String lineId;
...
{
"input" : {
"order" : {
"lineItemList" : [ {
"upc" : null,
"quantity" : null,
"retailPrice" : null,
"orderID" : null,
"shipmentID" : null,
"lineID" : null
} ]
}
}
}
如果省略@jsonunwrapped,则会出现值,但嵌套如下:
{
"input" : {
"order" : {
"lineItemList" : [ {
"lineItemType" : {
"upc" : 123,
"quantity" : 1,
"retailPrice" : 14,
"orderID" : 234,
"shipmentID" : 1,
"lineID" : 1
} ]
}
}
}
}
有没有人知道应该如何对此进行注解以获得这里想要的结果(打开包装但带有值)?谢了!
您是否已经成功地从XML封送到POJO中?在XML示例中,first order标记是自关闭的,这可能会导致问题。
这就是我将如何布局每个POJO(同时添加XmlProperties)。这应该正确地从POJO解封到JSON中。
顶层(example.java):
package com.example;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonPropertyOrder({
"input"
})
public class Example {
@JsonProperty("input")
private Input input;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
/**
*
* @return
* The input
*/
@JsonProperty("input")
public Input getInput() {
return input;
}
/**
*
* @param input
* The input
*/
@JsonProperty("input")
public void setInput(Input input) {
this.input = input;
}
@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
}
package com.example;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonPropertyOrder({
"order"
})
public class Input {
@JsonProperty("order")
private Order order;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
/**
*
* @return
* The order
*/
@JsonProperty("order")
public Order getOrder() {
return order;
}
/**
*
* @param order
* The order
*/
@JsonProperty("order")
public void setOrder(Order order) {
this.order = order;
}
@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
}
package com.example;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonPropertyOrder({
"lineItemList"
})
public class Order {
@JsonProperty("lineItemList")
private List<LineItemList> lineItemList = new ArrayList<LineItemList>();
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
/**
*
* @return
* The lineItemList
*/
@JsonProperty("lineItemList")
public List<LineItemList> getLineItemList() {
return lineItemList;
}
/**
*
* @param lineItemList
* The lineItemList
*/
@JsonProperty("lineItemList")
public void setLineItemList(List<LineItemList> lineItemList) {
this.lineItemList = lineItemList;
}
@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
}
package com.example;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonPropertyOrder({
"upc",
"quantity",
"retailPrice",
"orderID",
"shipmentID",
"lineID"
})
public class LineItemList {
@JsonProperty("upc")
private Integer upc;
@JsonProperty("quantity")
private Integer quantity;
@JsonProperty("retailPrice")
private Integer retailPrice;
@JsonProperty("orderID")
private Integer orderID;
@JsonProperty("shipmentID")
private Integer shipmentID;
@JsonProperty("lineID")
private Integer lineID;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
/**
*
* @return
* The upc
*/
@JsonProperty("upc")
public Integer getUpc() {
return upc;
}
/**
*
* @param upc
* The upc
*/
@JsonProperty("upc")
public void setUpc(Integer upc) {
this.upc = upc;
}
/**
*
* @return
* The quantity
*/
@JsonProperty("quantity")
public Integer getQuantity() {
return quantity;
}
/**
*
* @param quantity
* The quantity
*/
@JsonProperty("quantity")
public void setQuantity(Integer quantity) {
this.quantity = quantity;
}
/**
*
* @return
* The retailPrice
*/
@JsonProperty("retailPrice")
public Integer getRetailPrice() {
return retailPrice;
}
/**
*
* @param retailPrice
* The retailPrice
*/
@JsonProperty("retailPrice")
public void setRetailPrice(Integer retailPrice) {
this.retailPrice = retailPrice;
}
/**
*
* @return
* The orderID
*/
@JsonProperty("orderID")
public Integer getOrderID() {
return orderID;
}
/**
*
* @param orderID
* The orderID
*/
@JsonProperty("orderID")
public void setOrderID(Integer orderID) {
this.orderID = orderID;
}
/**
*
* @return
* The shipmentID
*/
@JsonProperty("shipmentID")
public Integer getShipmentID() {
return shipmentID;
}
/**
*
* @param shipmentID
* The shipmentID
*/
@JsonProperty("shipmentID")
public void setShipmentID(Integer shipmentID) {
this.shipmentID = shipmentID;
}
/**
*
* @return
* The lineID
*/
@JsonProperty("lineID")
public Integer getLineID() {
return lineID;
}
/**
*
* @param lineID
* The lineID
*/
@JsonProperty("lineID")
public void setLineID(Integer lineID) {
this.lineID = lineID;
}
@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
}
{
"input": {
"order": {
"lineItemList": [{
"upc": 123,
"quantity": 1,
"retailPrice": 14,
"orderID": 234,
"shipmentID": 1,
"lineID": 1
}]
}
}
}
下面有一个实体类,有两个字符串字段:name和description。description字段将包含一个原始JSON值,例如{“abc”:123} 如果存在@JSONRAWValue注释,建议如何将创建的JSON字符串编组回to Entity对象?我是不是遗漏了另一个注释? 谢谢
我想将XMl转换为另一种XMl格式。假设我在ats中有一个逻辑。埃姆沃。使改变TransformXml java文件如何集成以在camel上下文输入中转换tis(file:///d:/in)是xml文件,我想将其另存为xml。我已经将此文件作为bean类添加到camel
有没有办法把xml文件转换成json?XML可以是任何结构,因此没有用于实例化的POJO类。我需要将xml转换成json或Map,不需要根节点。 例如: 期望的JSON
我正在尝试使用JOLT(使用NiFi JoltTransformJson处理器)将JSON转换为不同的格式。对于单个JSON记录,正在使用的JOLT在JOLT应用程序演示中运行良好,而如果我使用多个JSON记录执行,那么我在JOLT应用程序演示中没有得到预期的输出。有人能告诉我在JOLT规范中需要做哪些额外的更改来处理多个JSON记录吗? 示例输入json JOLT使用: 预期输出JSON:
问题内容: 我将我的messageconverter配置为Jackson的 并在控制器中 从该即时消息期望从服务器返回JSON字符串{x:‘3’,y:‘4’},而无需任何其他配置。但是收到对我的ajax请求的404错误响应 如果使用@ResponseBody注释该方法,则将返回类型写入响应HTTP正文。该返回值将使用HttpMessageConverters转换为声明的方法参数类型。 我错了吗 ?
不推荐使用,是否有其他解决此问题的方法?