JavaScript将字节数组转换为JSON,然后再转回去

13

我在将JSON字符串转换回字节数组时遇到了问题。我的字节数组是通过JSON.stringify(bytes)转换为JSON字符串的。如果我使用JSON.parse将字符串转换回JS,我只得到一个对象,不再是数组了。 例如,在JS控制台中:

> var bytes = new Int32Array([101, 102, 103]);
> var s = JSON.stringify(bytes);
> s;
"{"0":101,"1":102,"2":103}"
> var a = JSON.parse(s);

> a;
Object {0: 101, 1: 102, 2: 103}

我该如何获取原始的字节数组?


2
你需要使用a中的数据创建一个新的数组。JSON没有“类型化数组”的表示,只有数组。 - Felix Kling
为什么不能直接使用数组而不转换为Int32Array? - gp.
因为我想通过网络发送JSON字符串。 - user1510580
你可以使用 JSON.stringify([101, 102, 103]); 将数组发送出去,这将会返回 "[101, 102, 103]" ... 数据需要以这种特定格式发送吗? - gp.
@gp,我的数组已经作为音频缓冲区构建好了,因此我无法以那种方式构建JSON字符串。 - user1510580
显示剩余2条评论
3个回答

14

这对我来说几乎可以但并不完全按预期工作。当我将包含类型化数组属性值的对象字符串化时,生成的JSON将引用数组文字,如'{"a": 1, "b": "[101, 102, 103]"}'。 - gb96

7
var arr = []; 
for(var p in Object.getOwnPropertyNames(a)) {
    arr[p] = a[p];
}

谢谢,@gp,那个方法可行。虽然我最初是在寻找一个不需要迭代的简单函数调用,但你的答案足够简单且可接受。 - user1510580

5
您可以使用Array.from将TypedArray转换为数组,然后再进行字符串化处理。 点击此处 查看更多详情。
JSON.stringify(Array.from(new Int32Array([101, 102, 103])))

4
请解释你的答案。仅代码答案对于未来的访问者并不那么有用。 - Liam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接