1

我有一个 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 String 。

因此,包含两个单元格数据的网格的 JSON 看起来像这样:

{
  id1 : {
  editorType:'InputEditor',
  value:'1234123',
  disabled:'false',
  rendered:'true'
  },

 id2 : {
 editorType:'SomeCustomEditor',
 value:'23456',
 disabled:'true',
 rendered:'true'
  }
 }

我可以在这里使用哪些现有的 JSON Java 库以最有效的方式生成此输出 JSON?任何示例代码都会在这里有所帮助。

4

2 回答 2

4

我已经为非常高速的消息传递过程测试了许多(到/从)JSON 解析器,应用程序必须每秒发送 200*100 条消息。由于 UI 是 JavaScript(和 websocket)——我们决定使用 JSON。我们从 JSONObject 开始——它失败了。

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

  1. 杰克逊
  2. 格森
  3. JSON对象

我们计划评估json-smart,但在 Jackson 上得到了不错的表现——所以停止了。如果您正在使用它并计划运行基准测试。包括这个。我们观察到的唯一问题是这似乎不太受欢迎,因此我们犹豫使用它来避免没有人听的角落案例故障。

于 2012-07-11T14:33:11.963 回答
0

对于这么多数据,您应该考虑使用 JSON 以外的其他内容。

  • 您可以推出自己的二进制格式;例如,4 个字节用于数字,1 个字节用于 2 个标志和一个代码编号用于编辑器类型,每个 1 个字节用于 id 的每个字符。

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

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

于 2012-07-11T14:05:35.743 回答