任何人都知道如何正确解析Uint8Array(基本上只是从Buffer ..继承)到一个有效的json对象?使用Node.js作为后端。我上传文件,端点将其作为Uint8Array接收。真的,这只是一个.json文件。因此,如果您使用Array和.toString(),它会像这样吐出内容:
bytes.toString()
""someObject": {
"foo": "bar",
"baz": {
"qux": "quux"
}
}
"
现在,当我尝试通过JSON.parse运行它时,由于无效字符而失败。所以我可以很容易地看到以下内容:
JSON.stringify(bytes.toString())
""\"someObject\": {\r\n\t\"foo\": \"bar\",\r\n\t\"baz\": {\r\n\t\t\"qux\": \"quux\"\r\n\t}\r\n}\r\n""
所以我必须删除所有这些选项卡,空格和换行符,以便将其解析为一个对象。所以我用以下方法做到了:
JSON.stringify(bytes.toString().replace(/\r/g, '').replace(/\t/g, '').replace(/\n/g, ''))
""\"someObject\": {\"foo\": \"bar\",\"baz\": {\"qux\": \"quux\"}}""
大!那里多余的垃圾都被删除了。所以现在我可以解析这件事。可是等等!它只会将其解析回字符串:
JSON.parse(JSON.stringify(bytes.toString().replace(/\r/g, '').replace(/\t/g, '').replace(/\n/g, '')))
""someObject": {"foo": "bar","baz": {"qux": "quux"}}"
这是因为开头和结尾的引号。所以...我想我可以简单地删除那些引号....
但是,有一种更简单的方法吗?看起来如此hacky做所有这些替换和字符串化回到解析。我在这里失踪的是什么?
所有我正在寻找的是一个实际的对象,使用以下格式:
{
"someObject": {
"foo": "bar",
"baz": {
"qux": "quux"
}
}
}
我知道这里有一些容易的东西我不知道。请帮助愚蠢的程序员将脸砸到键盘上! :)
答案 0 :(得分:0)
您需要在类型化数组中编码的文本中添加一对外括号:
{
"someObject": {
"foo": "bar",
"baz": {
"qux": "quux"
}
}
}