作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Gson 将 JSON(由 jquery 查询构建器生成)解析为相应的 Java 对象。我的问题是属性“值”可以是数组或单个值:
{
"condition": "AND",
"rules": [
{
"id": "date",
"field": "date",
"type": "date",
"input": "text",
"operator": "between",
"value": [
"01.01.2016",
"20.01.2016"
]
}
]
}
或
{
"condition": "AND",
"rules": [
{
"id": "date",
"field": "date",
"type": "date",
"input": "text",
"operator": "equal",
"value": "01.01.2016"
}
]
}
如果我的类有像 private String[] value
这样的字段,显然 Gson 可以为第一个 JSON 构建对象。对于第二个,像 private String value
这样的字段— 但不是两个 JSON 输入都具有任一 Java 字段选项。
所以我的问题:是否有一种方法可以同时处理单个“值”或“值”数组?
最佳答案
我不知道您用来反序列化此 JSON 的类的结构是什么,但我想建议有一个这样的类
public class Rule {
private String id;
private String field;
private String type;
private String input;
private String operator;
private List<String> value;
// constructors, getters and setters
}
如您所见,value
属性被定义为 java.lang.String
对象的列表。这种方法将帮助我们处理两种情况:当 value
是一个数组时以及当它是一个简单的字符串值时。
我们可以用 Gson 做什么?我们可以像这样创建自定义解串器
public class CustomSerializer implements JsonDeserializer<Rule> {
public Rule deserialize(JsonElement jsonElement, Type type,
JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
JsonObject obj = (JsonObject) jsonElement;
JsonElement value = obj.get("value");
List<String> values = new ArrayList();
if (value.isJsonArray()) {
for (JsonElement jsonElement1 : value.getAsJsonArray()) {
String str = jsonElement1.getAsString();
values.add(str);
}
} else {
values.add(value.getAsString());
}
// deserialize other properties
Rule rule = new Rule();
rule.setValue(values);
// set other properties
return rule;
}
}
之后,您需要使用
注册解串器Gson gson = new GsonBuilder()
.registerTypeAdapter(Rule.class, new CustomSerializer ())
.create();
并且您可以反序列化 JSON 对象,例如
{
"id": "date",
"field": "date",
"type": "date",
"input": "text",
"operator": "equal",
"value": "01.01.2016"
}
这是整个数据结构的一部分。
关于java - Gson:处理可选列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36433259/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!