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