我有一些Avro的数据作为GenericRecordS IN的Java,我要转换为JSON,我发现有两种方法可以做到这一点:一个涉及到使用JsonEncoder,以及其他涉及到简单的调用toString()上GenericRecord.
经过一些简短的实验,两种方法似乎都产生了相同的结果,并且使用JsonDecoder两种情况都可以将生成的JSON字符串转换回Avro .所以,我的问题是:
这两者之间是否有任何功能差异,是否有任何理由使用一个而不是另一个?
我正在使用Avro 1.7.7.
alp*_*oop 13
在进一步测试一下Avro源代码之后,似乎GenericRecord上的toString()方法是由GenericData.Record.toString()实现的,它调用GenericData.toString().这个方法的javadoc声明它应该提供记录的有效JSON表示,它就是这样做的.
但是,它的实现与JsonEncoder的不同之处在于JsonEncoder使用了Jackson库,并且更加关注Avro架构.GenericRecord.toString()方法只是使用StringBuilder遍历记录并构建JSON表示,并且不会如此密切关注Avro架构.
这意味着有些情况下调用toString()将生成一个无法使用JSONDecoder反序列化的JSON表示,例如在模式包含联合的情况下.
基于此,看起来像toString()方法是获取记录的人类可读表示的简单方便的方法,但作为根据模式序列化数据的方式是不可靠的.
| 归档时间: |
|
| 查看次数: |
3981 次 |
| 最近记录: |