我有一个JSF网格类型组件,其中每个单元格都是可单独编辑的,每个单元格的数据都包含在一个名为DataObject(DO)的POJO中。 DO的结构如下:
public class DO {
//Id should be the coordinate. eg x@y . x is the row position and y is the column position
private String id;
//This is value that goes to the client after applying formatter
private Object value;
//flag to indicate whether the cell will be disabled
private boolean disabled;
//flag to indicate whether the cell will be rendered
private boolean rendered=true;
//Editor type for the cell
private String editorType;
}
所以基本上id
字段标识网格中的单元格位置(行和列)。
现在在我们的例子中,我们可以有一个1000行X 100列网格,其中网格本身最初是稀疏填充的,这意味着大多数单元格不包含任何DO。因此,大约30%的单元格将包含数据,其余单元格将不包含任何数据。我需要通过ajax将JSON格式的数据从服务器传递到客户端javascript。我们的想法是遍历DO的集合并构造JSON字符串。
因此,具有两个单元格数据的网格的JSON将如下所示:
{
id1 : {
editorType:'InputEditor',
value:'1234123',
disabled:'false',
rendered:'true'
},
id2 : {
editorType:'SomeCustomEditor',
value:'23456',
disabled:'true',
rendered:'true'
}
}
我可以使用哪种现有的JSON Java库以最有效的方式生成此输出JSON?任何示例代码都会有所帮助。
答案 0 :(得分:4)
我已经测试了很多(来自/来自)JSON解析器以进行非常高速的消息传递过程,App必须每秒发送200 * 100个消息。由于UI是JavaScript(和websocket) - 我们决定使用JSON。我们从JSONObject开始 - 它失败了。
我没有数字,但这是这些API的相对速度:
(最快) Jackson > Gson >>> JSONObject
(最慢)
我们计划评估json-smart,但杰克逊的表现不错 - 所以停了下来。如果您正在使用它并计划运行基准测试。包括这个。我们观察到的唯一问题是这似乎不太受欢迎,因此我们犹豫是否使用它来避免没有机构收听的角落案例失败。
答案 1 :(得分:0)
对于那么多数据,你应该考虑使用JSON以外的东西。
您可以滚动自己的二进制格式;例如数字为4个字节,2个标志为1个字节,编辑器类型为代码编号,每个字符为1个字节。
您可以使用Google protobufs。这将为您提供紧凑的二进制格式,并以多种语言生成消息解析器和解析器。
对于每个非空单元格,数据的JSON编码大约为90个字节,而对于二进制格式,每个非空单元格可能为15个字节。解析和解析的开销将会少得多。