我继承了一个基于Java的大型服务器端代码库,它使用JSON与客户端进行通信。有几个原因, 基于Jackson的JSON转换必须使用二进制形式 - 换句话说,我在服务器上生成的JSON side由字节组成,而不是字符。
这对以前的客户来说不是问题,因为它们都是基于Java的。我可以使用Jackson库将二进制文件转换回对象。不幸的是,我被要求创建一些基于浏览器的客户端,这些客户端需要使用Javascript才能接收和显示JSON信息。
我正在尝试使用JQuery的JSON转换函数,但事实证明,JQuery和常规Javascript函数都无法将一组JSON字节转换回对象。我需要将字节转换回字符,以便将它们转换回对象。
我了解到为了将字节转换为字符,我必须将字节转换为字节数组。这就是我遇到问题的地方。
我一直在尝试使用各种方法将二进制JSON信息转换回一个表单(一个字节数组),可以使用JSON转换函数将其转换为有意义的对象。我已经尝试使用ArrayBuffer将数据转换为字节缓冲区,然后使用int8Array()函数创建一个字节数组:
var buffer = new ArrayBuffer(obj.payload.length);
var bits = new Int8Array(buffer);
我还尝试使用uint8Array(),并尝试在Internet上找到各种其他转换例程(此处为Stack Overflow),以便创建可转换为有意义字符的数组。我的所有尝试都在运行时导致错误和失败,或者产生了破坏JSON转换器的垃圾。
有没有办法让Javascript读取Jackson生成的一组字节,以便使用JSON转换器将它们转换回对象?或者Javascript只能转换JSON字符串吗?
有人请指教......
答案 0 :(得分:5)
假设你的二进制JSON是这样的:
[123, 34, 107, 101, 121, 34, 58, 34, 118, 97, 108, 117, 101, 34, 125]
您可以轻松将其转换为字符串:
var str = String.fromCharCode.apply(String, data);
并使用JSON对象解析它:
JSON.parse(str);