首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么样的二进制数据不能被压缩到JSON?

什么样的二进制数据不能被压缩到JSON?
EN

Stack Overflow用户
提问于 2019-11-17 22:29:42
回答 1查看 1.3K关注 0票数 1

我在任何地方都读到JSON不能编码二进制数据,所以我编写了这个简单的测试来检查这是否真的是真的。

代码语言:javascript
复制
function test(elem){
    let reader = new FileReader ;
    reader.onload = ()=>{
        let json = JSON.stringify(reader.result) ;
        let isCorrect = JSON.parse(json) === reader.result ;
        alert('JSON stringification correct: ' + isCorrect) ;
    } ;
    reader.readAsBinaryString(elem.files[0]) ;
}
代码语言:javascript
复制
Choose a binary file: <br>
<input type=file onchange="test(this)">

您必须从计算机中选择一个二进制文件,test函数将该文件读取为二进制字符串,然后它将JSON.stringify该字符串,然后解析它并将其与原始二进制字符串进行比较。

我尝试了很多很多二进制文件(大部分是.exe文件),但我只是找不到一个不能被JSON化的文件。

您能给出一个不能转换为JSON字符串的例子吗?

EN

回答 1

Stack Overflow用户

发布于 2019-11-18 01:57:35

我认为你没有正确地理解这一点。

首先,“JSON字符串”意味着什么?您是指JSON.stringify()的结果还是JSON文档中的数据类型?让我们来看看后者,因为我认为“不能包含二进制数据”的语句就是关于这个的。

如果查看等级库,JSON字符串不能包含所有可能的字符。特别是不允许使用控制字符。这意味着JSON字符串不能直接包含任意(二进制)数据。但是,您可以使用转义序列(\u)来表示这些字符,这是一种编码类型。JSON.stringify()自动为您执行此操作。

例如:

代码语言:javascript
复制
s = String.fromCodePoint(65,0,66); // A "binary" string, 'A', 0x00, 'B'
JSON.stringify(s); // "A\u0000B";

JSON.parse()也知道这些转义序列,并将恢复二进制数据。

因此,JSON字符串数据类型可以对二进制数据进行编码,但它不能直接包含所有二进制数据,而无需编码。

一些补充说明:

  • 在JavaScript (和许多其他语言)中正确处理二进制数据可能很困难。字符串数据类型不是为二进制数据设计的。例如,您必须知道用于在内部存储字符串数据的编码。
  • 通常,二进制数据不是使用转义序列进行编码,而是使用更有效的编码方案,如Base64。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58905828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档