Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript stringify或如何将二进制数据序列化为base64编码的JSON?_Javascript_Json_Blob_Arraybuffer - Fatal编程技术网

Javascript stringify或如何将二进制数据序列化为base64编码的JSON?

Javascript stringify或如何将二进制数据序列化为base64编码的JSON?,javascript,json,blob,arraybuffer,Javascript,Json,Blob,Arraybuffer,我有一个Javascript对象,它将由一个带有参数和子对象的非循环对象层次结构组成。其中一些对象可能保存从文件加载的二进制数据或通过XHR接收的二进制数据(如果是Blob、ArrayBuffer或其他对象,则尚未定义) 通常我会使用JSON.stringify()将其序列化为JSON,但如何指定二进制数据将采用base64编码 那么你会推荐我什么二进制数据对象(Blob、ArrayBuffer等) 编辑:除纯JSON以外的其他数据格式是不可选择的。确实使用了两种可能的解决方案: a)调用rep

我有一个Javascript对象,它将由一个带有参数和子对象的非循环对象层次结构组成。其中一些对象可能保存从文件加载的二进制数据或通过XHR接收的二进制数据(如果是Blob、ArrayBuffer或其他对象,则尚未定义)

通常我会使用JSON.stringify()将其序列化为JSON,但如何指定二进制数据将采用base64编码

那么你会推荐我什么二进制数据对象(Blob、ArrayBuffer等)

编辑:除纯JSON以外的其他数据格式是不可选择的。

确实使用了两种可能的解决方案:

a)调用replacer函数以决定如何序列化值

function replacer(key, value) {
  if (typeof value === "string") {
    return undefined;
  }
  return value;
}

var foo = {foundation: "Mozilla", model: "box", week: 45, transport: "car", month: 7};

var jsonString = JSON.stringify(foo, replacer);
b)为对象定义一个
toJSON()
成员函数

var obj = {
  foo: 'foo',
  toJSON: function () {
    return '{ "foo": "' +  + '" }';
  }
};
JSON.stringify(obj);      // '{ "foo": "Zm9v" }'

如果这对您也适用,请改为添加注释。

对于blob,事先将对象中的blob转换为base64,然后将对象字符串化更有意义。这是因为没有可靠的方法将blob同步转换为base64,因此这里的替换函数不是一个可行的选择

const blobToBase64=(blob)=>{
返回新承诺((解决)=>{
const reader=new FileReader();
reader.readAsDataURL(blob);
reader.onloadend=函数(){
解析(reader.result);
};
});
};
(异步()=>{
const b64=等待blobToBase64(blob);
const jsonString=JSON.stringify({blob:b64});
log(jsonString);
})();
从解析的JSON中获取blob非常简单

constparsed=JSON.parse(jsonString);
const blob=wait fetch(parsed.blob).then(res=>res.blob());
控制台日志(blob);

JSON.stringify
接受第二个参数,您可以使用该参数定义自己对特定值的转换:这是如何回答问题的?那么base64在解决方案中的位置?