将 JSON 对象转换为 Buffer,将 Buffer 转换回 JSON 对象

我有一个 JSON 对象,我将它转换成 Buffer并在这里执行一些处理。稍后,我想将相同的缓冲区数据转换为有效的 JSON 对象。

我正在开发 Node V6.9.1

下面是我尝试的代码,但我得到 [object object]时,我转换回 JSON,无法打开这个对象。

var obj = {
key:'value',
key:'value',
key:'value',
key:'value',
key:'value'
}


var buf = new Buffer.from(obj.toString());


console.log('Real Buffer ' + buf);  //This prints --> Real Buffer <Buffer 5b 6f 62 6a 65 63 74>


var temp = buf.toString();


console.log('Buffer to String ' + buf);  //This prints --> Buffer to String [object Object]

因此,我尝试用检查的方式打印整个对象

console.log('Full temp ' + require('util').inspect(buf, { depth: null }));  //This prints --> '[object object]' [not printing the obj like declared above]

如果我试图像数组一样读取它

 console.log(buf[0]);  // This prints --> [

我尝试解析它也抛出 SyntaxError: Unexpected token o in JSON at position 2

我需要像我创建的那样将它视为真实的对象(我的意思是像上面声明的那样)。

请帮助. 。

225733 次浏览

你需要把 json 串起来,而不是调用 toString

var buf = Buffer.from(JSON.stringify(obj));

以及将 string 转换为 json obj:

var temp = JSON.parse(buf.toString());

作为@Ebrahim,您必须使用第一个 JSON.stringify将 JSON 转换为字符串,然后您可以将其转换为 Buffer。但是使用 JSON.stringify有一点点风险,因为它可以在自引用或循环引用的情况下破坏你的应用程序:

   var y={}
y.a=y
JSON.stringify(y) // Uncaught TypeError: Converting circular structure to JSON

如果您有这样的风险,最好使用这样的安全串联解决方案 npm 模块 Safe-json-stringify

然后你必须做:

// convert to buffer:
const stringify = require('safe-json-stringify');
var buf = Buffer.from(stringify(obj));


// convert from buffer:
var temp = JSON.parse(buf.toString());


enter image description here

请复制下面的代码片段

const jsonObject = {
"Name":'Ram',
"Age":'28',
"Dept":'IT'
}
const encodedJsonObject = Buffer.from(JSON.stringify(jsonObject)).toString('base64');
console.log('--encodedJsonObject-->', encodedJsonObject)
//Output     --encodedJsonObject--> eyJOYW1lIjoiUmFtIiwiQWdlIjoiMjgiLCJEZXB0IjoiSVQifQ==


const decodedJsonObject = Buffer.from(encodedJsonObject, 'base64').toString('ascii');
console.log('--decodedJsonObject-->', JSON.parse(decodedJsonObject))
//Output     --decodedJsonObject--> {Name: 'Ram', Age: '28', Dept: 'IT'}