关于格式转换
发布于 3 年前 作者 hezhongfeng 7687 次浏览 来自 问答

使用mysql-pro查询了表 然后返回来数据的格式是下面这样的,请问怎么才能转成正常的数组格式

[ RowDataPacket {
    id: 1,
    user_id: 24,
    title: '一篇文章',
    allow_comment: 1,
    is_public: 1,
    view_count: 10,
    post_count: 0 },
  RowDataPacket {
    id: 2,
    user_id: 24,
    title: '华盛顿',
    is_public: 1,
    view_count: 8,
    post_count: 0 } ]
12 回复

这不就是数组了?!

@captainblue2013 前面有RowDataPacket 的

无所谓 直接按照数组的用法用就行了呀

可以

JSON.parse(JSON.stringify(obj))

但是这么做的意义在哪里呢

@wssgcg1213 是这样的 正常的情况下的确可以直接使用 但是我是使用session存储这些东西 就不行了~ 我在想是不是改用flash呢~纠结 谢谢回答~

如果字符串 先把RowDataPacket 这一串替换为空 ,剩下的就是数组了。

@doerU 啊~咋替换呢?查找替换,不知道安不安全~

@hezhongfeng 目测你这里都是这样的 “RowDataPacket” 如果在你的属性值里面没得 这样的值,应该是安全的。

@hezhongfeng 这是console.log的效果,表示那个object是一个RowDataPacket的实例,你可以看一下nodejs Console的源码,它本身就是一个纯对象的纯数组。 From Noder

@wssgcg1213 那就奇了怪了 我自己手动赋值的数组是没问题的 使用这个数组就出错了

RowDataPacket 这串字符的来历: https://github.com/nodejs/node/blob/master/lib%2Fconsole.js console.log方法中使用了util.format()

https://github.com/nodejs/node/blob/master/lib/util.js#L71 util.format 使用了模块作用域下的 inspect 方法 inspect 方法中 return formatValue(ctx, obj, ctx.depth); 追踪到 formatValue 函数 431行 var constructor = getConstructorOf(value); 获得了 constructor 556 行

  // Add constructor name if available
  if (base === '' && constructor)
    braces[0] = constructor.name + ''+ braces[0];

RowDataPacket 正是这个object 的 constructor 名称

@wssgcg1213 找到问题原因了 是session的长度限制 数据太多了点 要改变这种用法了

回到顶部