为此用例选择最有效的JSON库

时间:2012-07-11 13:44:42

标签: java json jsf gson

我有一个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?任何示例代码都会有所帮助。

2 个答案:

答案 0 :(得分:4)

我已经测试了很多(来自/来自)JSON解析器以进行非常高速的消息传递过程,App必须每秒发送200 * 100个消息。由于UI是JavaScript(和websocket) - 我们决定使用JSON。我们从JSONObject开始 - 它失败了。

我没有数字,但这是这些API的相对速度:
(最快) Jackson > Gson >>> JSONObject (最慢)

  1. Jackson
  2. Gson
  3. JSONObject
  4. 我们计划评估json-smart,但杰克逊的表现不错 - 所以停了下来。如果您正在使用它并计划运行基准测试。包括这个。我们观察到的唯一问题是这似乎不太受欢迎,因此我们犹豫是否使用它来避免没有机构收听的角落案例失败。

答案 1 :(得分:0)

对于那么多数据,你应该考虑使用JSON以外的东西。

  • 您可以滚动自己的二进制格式;例如数字为4个字节,2个标志为1个字节,编辑器类型为代码编号,每个字符为1个字节。

  • 您可以使用Google protobufs。这将为您提供紧凑的二进制格式,并以多种语言生成消息解析器和解析器。

对于每个非空单元格,数据的JSON编码大约为90个字节,而对于二进制格式,每个非空单元格可能为15个字节。解析和解析的开销将会少得多。