将 JSON 对象转换为 Buffer 并将 Buffer 转换为 JSON 对象

Posted

技术标签:

【中文标题】将 JSON 对象转换为 Buffer 并将 Buffer 转换为 JSON 对象【英文标题】:Convert a JSON Object to Buffer and Buffer to JSON Object back 【发布时间】:2017-06-16 12:27:54 【问题描述】:

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

我正在开发 Node V6.9.1

以下是我尝试过的代码,但是当我转换回 JSON 并且无法打开此对象时,我收到了 [object object]

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

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

请帮忙..

【问题讨论】:

("id":"value").toString() === '[object Object]' //true new Buffer() 已弃用。见这里:nodejs.org/api/buffer.html#buffer_new_buffer_array 【参考方案1】:

你需要对json进行字符串化,而不是调用toString

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

以及用于将字符串转换为 json obj :

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

【讨论】:

不需要new 没有更好的解决方案吗?我不喜欢将数字转换为字符串。 如果obj中有另一个缓冲区字段,这将不起作用 其实这里不需要toString。 groups.google.com/forum/#!topic/nodejs/hybuh7DbQkM 对我来说,当我拿走 JSON.stringify 并将对象直接放在参数中时它起作用了,如下所示: var buf = Buffer.from( key:'value', key:' value', key:'value', key:'value', key:'value' );【参考方案2】:

作为@Ebrahim,您必须先使用JSON.stringify 将JSON 转换为字符串,然后才能将其转换为缓冲区。但是使用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());

【讨论】:

【参考方案3】:

请复制到sn-p下方

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'

【讨论】:

以上是关于将 JSON 对象转换为 Buffer 并将 Buffer 转换为 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中将对象转换为 JSON 并将 JSON 转换为对象,(像 Gson for Java 之类的库)

如何加载 JSON 文件并将其转换为特定类型的对象?

Jackson 对象和JSON的相互转换

如何将 JSON 中的 SQL 主键转换为 javascript 对象键,并将其他数据作为其值

处理数据(I/O)

如何将 Javascript 对象转换为节点缓冲区?