是否可以像在 php 上一样在 node.js 上反序列化?

Is it possible to unserialize on node.js just like on php?

嗨,

我正在尝试使用 PHPUnserialize.unserialize 反序列化以下字符串:

a:3:{i:19694;a:5:{s:16:"ignore_ignore_id";s:5:"19694";s:15:"ignore_messages";s:1:"1";s:17:"ignore_signatures";s:1:"1";s:13:"ignore_topics";s:1:"1";s:12:"ignore_chats";s:1:"0";}i:25895;a:5:{s:16:"ignore_ignore_id";s:5:"25895";s:15:"ignore_messages";s:1:"0";s:17:"ignore_signatures";s:1:"0";s:13:"ignore_topics";s:1:"0";s:12:"ignore_chats";s:1:"1";}i:19917;a:5:{s:16:"ignore_ignore_id";s:5:"19917";s:15:"ignore_messages";s:1:"1";s:17:"ignore_signatures";s:1:"0";s:13:"ignore_topics";s:1:"0";s:12:"ignore_chats";s:1:"0";}}

我只需要其中“ignore_chats”= 1 的 ID,所以我希望得到以下输出:[25895]

我曾在 php 上使用以下代码实现此目的:

$igusers = unserialize($ignored);
  
 foreach($igusers as $key => $value) {
  if($value['ignore_chats'] == 1) {
   $ignoredids .= "[".$value['ignore_ignore_id']."]";
  }
 }

在 node.js 我试过这样:

PHPUnserialize.unserialize(ignored)

但我收到以下错误:

SyntaxError: Unknown / Unhandled data type(s)

这是为什么?

谢谢。

我能够使用 npm 库反序列化 php-serialize

// using node v14.15.3

const {unserialize} = require('php-serialize');

const a = unserialize('a:3:{i:19694;a:5:{s:16:"ignore_ignore_id";s:5:"19694";s:15:"ignore_messages";s:1:"1";s:17:"ignore_signatures";s:1:"1";s:13:"ignore_topics";s:1:"1";s:12:"ignore_chats";s:1:"0";}i:25895;a:5:{s:16:"ignore_ignore_id";s:5:"25895";s:15:"ignore_messages";s:1:"0";s:17:"ignore_signatures";s:1:"0";s:13:"ignore_topics";s:1:"0";s:12:"ignore_chats";s:1:"1";}i:19917;a:5:{s:16:"ignore_ignore_id";s:5:"19917";s:15:"ignore_messages";s:1:"1";s:17:"ignore_signatures";s:1:"0";s:13:"ignore_topics";s:1:"0";s:12:"ignore_chats";s:1:"0";}}');
const b = Object.values(a).filter(v => (v.ignore_chats === '1')).map(v => v.ignore_ignore_id);

console.log(a); 
/* prints out:
{
  '19694': {
    ignore_ignore_id: '19694',
    ignore_messages: '1',
    ignore_signatures: '1',
    ignore_topics: '1',
    ignore_chats: '0'
  },
  '19917': {
    ignore_ignore_id: '19917',
    ignore_messages: '1',
    ignore_signatures: '0',
    ignore_topics: '0',
    ignore_chats: '0'
  },
  '25895': {
    ignore_ignore_id: '25895',
    ignore_messages: '0',
    ignore_signatures: '0',
    ignore_topics: '0',
    ignore_chats: '1'
  }
}
*/

console.log(b)
/* prints out
[ '25895' ]
*/