我已将DOM文档转换为json String。但是,在List只有一个值且List有多个值的情况下,List的映射方式存在一些问题。
对于前: 1)在DOM文档被赋予json字符串之后,这里AlphaStatus List只有一个值:
{
"Gamma": {
.
.
.
.
"AlphaStatuses": {
"AlphaStatus": {
"AlphaHeaderKey": "201612221122273660",
"AlphaLineKey": "201612221122273661",
}
},
"Delta": {
...
}
}
}
2)在DOM文档被赋予json字符串之后,这里AlphaStatus List只有多个值显示为:
{
"Gamma": {
.
.
.
.
"AlphaStatuses": {
"AlphaStatus": [
{
"AlphaHeaderKey": "201612221122273660",
"AlphaLineKey": "201612221122273661",
},
{
"AlphaHeaderKey": "201612221122273660",
"AlphaLineKey": "201612221122273662",
},
{
"AlphaHeaderKey": "201612221122273660",
"AlphaLineKey": "2016}2221122273663",
}
]
},
"Delta": {
...
}
}
}
我使用下面的jackson代码将xml字符串转换为json:
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
Object json = mapper.readValue(jObject.toString(), Object.class);
String output = mapper.writeValueAsString(json);
我的问题是,我如何确保AlphaStatus List始终以[{和结束于}]开头,无论它只有一个值还是多个值。如何解决这个问题。 它导致另一个系统中出现问题,该问题假定AlphaStatus始终是List,并期望[{成为令牌的一部分。
感谢任何帮助。或者我应该在这种情况下使用一些字符串实用程序来解析AlphaStatus并替换为[{和}]。怎么做呢
答案 0 :(得分:0)
@JsonRootName("Gamma")
public class Gamma {
private AlphaStatuses AlphaStatuses;
// getters and setters
}
public class AlphaStatuses {
@JsonProperty("alphaStatus")
private List<AlphaStatus> alphaStatuses;
// getters and setters
}
public class AlphaStatus{
@JsonProperty("alphaHeaderKey")
private String alphaHeaderKey;
@JsonProperty("alphaLineKey")
private String alphaLineKey;
// getters and setters
}
**Test class**:
@Test
public void test() throws Exception {
Gamma gamma=new Gamma();
gamma.setAlphaStatuses(new AlphaStatuses(Arrays.asList(new AlphaStatus("201612221122273660","201612221122273660"))));
ObjectMapper mapper=new ObjectMapper();
mapper.configure(SerializationFeature.WRAP_ROOT_VALUE,true);
String jsonString=mapper.writeValueAsString(gamma);
System.out.println("output "+jsonString);
}
**Output**:
output {"Gamma":{"alphaStatues":{"alphaStatus":[{"alphaHeaderKey":"201612221122273660","alphaLineKey":"201612221122273660"}]}}}
答案 1 :(得分:0)
首先,它似乎是
行 Object json = mapper.readValue(jObject.toString(), Object.class);
没用,因为你已经有了一个序列化的对象(jObject)。
使用它:
String output = mapper.writeValueAsString(jObject);
第二,似乎你的问题字段是java.lang.Object类型,对吧?
如果你为它分配一个值,它将产生一个单独的Json对象:
jObject.setAlphaStatuses(alphaStatus);
- &gt;结果 - &gt; {...}
如果你指定某种类型的集合,它将产生一个Json数组:
jObject.setAlphaStatuses(Arrays.asList(alphaStatus1, alphaStatus2));
- &gt;结果 - &gt; [{...},{...}]
为了避免这种情况,要么总是传递一个列表,要么(如果你可以改变类的定义)将它变成一个Collection(可能是一些List)。
这是一个要测试的小片段:
import java.util.Arrays;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonObjects {
private final static ObjectMapper mapper = new ObjectMapper();
private final static AlphaStatus as1 = new AlphaStatus();
private final static AlphaStatus as2 = new AlphaStatus();
static {
as1.setAlphaHeaderKey("A");
as1.setAlphaLineKey("B");
as2.setAlphaHeaderKey("C");
as2.setAlphaLineKey("D");
}
public static void main(String[] args) throws JsonProcessingException {
final Gamma gamma = new Gamma();
gamma.setAlphaStatuses(Arrays.asList(as1, as2));
System.out.println(mapper.writeValueAsString(gamma));
gamma.setAlphaStatuses(as1);
System.out.println(mapper.writeValueAsString(gamma));
}
static class Gamma {
Object alphaStatuses;
public Object getAlphaStatuses() {
return alphaStatuses;
}
public void setAlphaStatuses(Object alphaStatuses) {
this.alphaStatuses = alphaStatuses;
}
}
static class AlphaStatus {
String alphaHeaderKey;
String alphaLineKey;
public String getAlphaHeaderKey() {
return alphaHeaderKey;
}
public void setAlphaHeaderKey(String alphaHeaderKey) {
this.alphaHeaderKey = alphaHeaderKey;
}
public String getAlphaLineKey() {
return alphaLineKey;
}
public void setAlphaLineKey(String alphaLineKey) {
this.alphaLineKey = alphaLineKey;
}
}
}
结果(不完全是你的结果,仅用于演示):
{"alphaStatuses":[{"alphaHeaderKey":"A","alphaLineKey":"B"},{"alphaHeaderKey":"C","alphaLineKey":"D"}]}
{"alphaStatuses":{"alphaHeaderKey":"A","alphaLineKey":"B"}}