【发布时间】:2018-12-31 14:02:22
【问题描述】:
我正在尝试得到这个输出:
{
"columnNames":[
"fruit"
],
"values":[
[
"Apple is green"
]
],
"time":"2017-12-11T00:00:00Z"
}
但我最终得到以下...
{
"columnNames":[
"fruit"
],
"values":[
[
{
"stringValue":"Apple is green",
"intValue":0,
"booleanValue":false
}
]
],
"time":null
}
这是我的代码(到目前为止),如果您能告诉我哪里出错了,我将不胜感激?
public static void main(String[] args) {
List<String> columnNames = new ArrayList<>();
columnNames.add("fruit");
List<List<ResponseValues>> responseValues = new ArrayList<>();
List<ResponseValues> values = Collections.singletonList(new ResponseValues("Apple is green"));
responseValues.add(values);
String expectedResult = createAJson(columnNames, responseValues);
System.out.println(expectedResult);
}
public static String createAJson(List<String> columnNames, List<List<ResponseValues>> values) {
String jsonBlock = "";
repBuilder repBuilder = new repBuilder();
ObjectMapper mapper = new ObjectMapper();
repBuilder.setColumnNames(columnNames);
repBuilder.setValues(values);
try {
jsonBlock = mapper.writeValueAsString(repBuilder);
}
catch (JsonProcessingException e) {
e.printStackTrace();
}
return jsonBlock;
}
还有一些用于创建响应值部分的样板代码:
@JsonPropertyOrder({
"columnNames",
"values",
"time"
})
public class RepBuilder {
public List<String> columnNames;
public List<List<ResponseValues>> values;
private String time;
@JsonProperty("columnNames")
public List<String> getColumnNames() {
return columnNames;
}
@JsonProperty("columnNames")
public void setColumnNames(List<String> columnNames) {
this.columnNames = columnNames;
}
@JsonProperty("values")
public List<List<ResponseValues>> getValues() {
return values;
}
@JsonProperty("values")
public void setValues(List<List<ResponseValues>> values) {
this.values = values;
}
@JsonProperty("time")
public String gettime() {
return time;
}
@JsonProperty("time")
public void settime(String time) {
this.time = time;
}
}
还有响应值:这样做是为了让我可以设置 STRING 或 INTEGER 或 BOOLEAN 并添加到列表中?
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ResponseValues {
private String stringValue;
private int intValue;
private boolean booleanValue;
public ResponseValues(String stringValue) {
this.stringValue = stringValue;
}
public ResponseValues(int intValue) {
this.intValue = intValue;
}
public ResponseValues(boolean booleanValue) {
this.booleanValue = booleanValue;
}
public String getStringValue() {
return stringValue;
}
public void setStringValue(String stringValue) {
this.stringValue = stringValue;
}
public int getIntValue() {
return intValue;
}
public void setIntValue(int intValue) {
this.intValue = intValue;
}
public boolean getBooleanValue() {
return booleanValue;
}
public void setBooleanValue(boolean booleanValue) {
this.booleanValue = booleanValue;
}
}
谁能指出我错过了什么?我也尝试使用@JsonProperty(access = JsonProperty.Access.WRITE_ONLY),但这对我不起作用,还有其他想法吗? 如果您在回答的上下文中使用我的代码,我将不胜感激(因为我仍在学习 java)
【问题讨论】:
-
你从来没有设置时间,所以它是空的。你有一个 List
- > 虽然你想要一个 List
- >。所以你最终在 JSON 中作为一个包含对象数组的数组而不是包含字符串数组的数组。
标签: java arrays json list jackson