我正在使用 FlexJSON(但我对其他库开放)并且我想手动构建一个 json 数组。我需要添加某些不属于正在序列化的模型的部分。例如,我想将 html 列和 css 列添加到我的 json 数组中。该数据将通过迭代列表并查看值是否高于或低于特定数字来确定。
现在我只有这个。
JSONSerializer json = new JSONSerializer();
json.transform(new DateTransformer("MM/dd/yyyy hh:mm:ss"), "timeStamp");
json.transform(new DecimalTransformer("#.00") , "ounces");
json.include("timeStamp", "ounces");
json.exclude("*");
json.prettyPrint(true);
response.setContentTypeIfNotSet("application/json");
response.out.write(json.serialize(list).getBytes());
但我想手动构建这个数组,而不是仅仅调用序列化。假设盎司数低于某个数字,那么 css 列的值应该会改变。 css 列不是对象(模型)的一部分,因此我也需要手动添加它。谢谢。
最佳答案
Flexjson 和其他 JSON 序列化库使用模型的结构作为指导,因此当模型具有您想要放入 JSON 的数据时,它们的工作效果最佳。 Flexjson 将在序列化期间使用属性方法(getter/setter)。因此,如果您想添加像您所说的那样的计算,您可以添加 getCssColumn() 属性方法,Flexjson 会将其视为任何旧属性:
public String getCssColumn() {
return ounces < SOME_THRESHOLD ? "tooSmall" : "justRight";
}
因此,您可以根据需要向对象添加任意数量的方法,并且它将序列化它们,就像它们是对象上的实际实例变量一样。这是一个很好的技巧,可以将计算值渲染到 JSON 输出中,就像您正在寻找的那样。
如果您不喜欢这样,那么我建议创建一个包装器对象来包装您的模型对象,以跟踪您想要添加到模型中的数据。您必须灵活处理 JSON 输出,但您可以将值包装在它周围。你最终可能会得到这样的结果:
{
"cssColumn": "justRight",
...
"data": {
"ounces": 45,
...
}
}
数据指向模型对象,因此它位于根的下一层。这个选项会消耗更多的内存,并且需要更多的结构(也就是要编写更多的类)才能工作,所以如果是我的话,我更喜欢第一个选项。
关于java - 如何逐行构建 JSON 数组(遍历列表)。 FlexJSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6246559/