我正在尝试使用API(没有文档),后端使用ScalaJS和uPickle(MsgPack),并且它为每个API端点返回原始二进制数据。我需要以某种方式将此原始二进制数据转换为可读的JSON。
这是我的代码:
function arrayBufferToString( buffer, encoding, callback ) {
var blob = new Blob([buffer],{type:'text/plain'});
var reader = new FileReader();
reader.onload = function(evt){callback(evt.target.result);};
reader.readAsText(blob, encoding);
}
fetch("https://example.com/example/fetchStats", {
"credentials": "include",
"headers": {
"accept": "*/*",
"accept-language": "en-US,en;q=0.9",
"content-type": "application/octet-stream"
},
"body":"\u0000",
"method":"POST",
"mode":"cors"
}).then(response => response.arrayBuffer().then(arrayBuffer => {
if (arrayBuffer) {
var bytes = new Uint8Array(arrayBuffer);
var u16 = new Uint16Array(bytes.length)
for(var i=0;i<bytes.length;i++){
u16[i] = bytes[i].toString().charCodeAt(0)
}
arrayBufferToString(u16, 'UTF-8', console.log.bind(console))
}
}));
这将返回以下字符串:“ 3011102010301”(数字之间带有空格) 我不确定如何读取此数据。就像我上面说的,API使用此https://github.com/lihaoyi/upickle代替JSON。
有人知道如何将原始二进制数据转换为人类可读的格式吗?
上面的HTTP请求返回的示例:╚ ╔t╔ ╗ ╔ ╚ ╔
我很迷路。
答案 0 :(得分:0)
您不能使用response.text()
或response.json()
代替response.arrayBuffer()
fetch('https://httpbin.org/get')
.then(response => response.json())
.then(console.log);