java - 如何逐行构建 JSON 数组(遍历列表)。 FlexJSON

标签 java json playframework flexjson

我正在使用 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/

相关文章:

scala - 找不到表 "play_evolutions"

JavaFX 文本控件 : Setting the Fill Color

java - 在 Controller 类中全局声明 HttpSession?

java - 弹出窗口和 SpringMVC - 数据交换。怎么做?

javascript - Jquery AJAX JSON PHP POST 上未找到 404

java - 是否可以设置SonarQube来分析JSON文件?

javascript - 读取 Google Sheets 中的 JSON 数据

javascript - 使用我的表中的一些值制作图表

java - 更新查询期间条件生成器错误 : BinaryArithmeticOperation did not match expected type

java - Play 2.2.1 : ambiguous implicit values for object PlayMagicForJava