我在表单提交上有一个带有复选框的表单。 如果检查了一个,它将以字符串形式出现,如果多次检查,则以json数组形式出现。
如何将对象作为数组?
TypeReference<HashMap> typeRef = new TypeReference<HashMap>(){};
JsonFactory factory = new JsonFactory();
ObjectMapper mapper = new ObjectMapper(factory);
HashMap<String, Object> bean = mapper.readValue(formBean, typeRef);
bean.get("somevarible")
&lt;无论检查了多少个盒子,我想把它作为数组
由于
修改
我正在使用此功能,如何更新?
$.fn.serializeObject = function() {
var o = {};
var a = this.serializeArray();
$.each(a, function() {
if (o[this.name]) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
答案 0 :(得分:0)
我有一个类似的问题反序列化json(又名“复选框问题”)。我(丑陋)的解决方法是使用@JsonAnySetter手动对传入的(字符串/列表)值执行“正确”操作。
// q is always just a string.
@JsonProperty("q")
private String query;
// fq could be a string or a list.
private List<String> filterQuery;
// (get/set/add omitted)
// XXX - this is an evil hack to support 1 or >1 fq values
// there must be a better way to support 2-way deserialization
@JsonAnySetter
void addEntry(String key, Object value)
{
if ("fq".equals(key))
{
if (value == null)
{
// can this even happen?
} else if (String.class.equals(value.getClass()))
{
addFilterQuery((String) value);
} else
{
setFilterQuery((List<String>) value);
}
}
}