【问题标题】:How to extract value from stdClass string?如何从 stdClass 字符串中提取值?
【发布时间】:2018-06-18 11:09:29
【问题描述】:

在数据库中执行一些查询后,我得到了字符串

 objectString = 'O:8:"stdClass":1:{s:5:"$date";O:8:"stdClass":1:{s:11:"$numberLong";s:13:"1546297200000";}}

我想从 stdClass 字符串中获取 $numberLong 值。我试过了

      var dateObj = new Date(objectString.$date.$numberLong - 1000);

在这一行抛出错误信息

“未捕获的类型错误:无法读取未定义的属性 '$numberLong' 在 getDateStringObject"

请帮忙!!!

【问题讨论】:

  • 这看起来像是一个 PHP 问题。介意我们更新标签吗?
  • 由于某些复杂的原因,我设法将 stdclass 对象转换为字符串...现在我想提取 $numberLong 值

标签: php serialization


【解决方案1】:

这看起来像一个序列化的stdObject。如果您在任何时候都从 PHP 获取此值,我会建议 unserializing 在将其返回到 javascript 之前。

如果操作正确,您将能够按如下方式访问日期:

var dateObj = new Date(object.date.numberLong - 1000);

如果您不能使用 PHP 来反序列化对象,那么您可以使用正则表达式来匹配值,如下所示:

var objectString = 'O:8:"stdClass":1:{s:5:"$date";O:8:"stdClass":1:{s:11:"$numberLong";s:13:"1546297200000";}}'
var pattern = /("\$numberLong")(.+)("\d+")/g
var match = pattern.exec(objectString);
console.log(match[3]);

【讨论】:

  • 我如何反序列化脚本标签内的 javascript 变量
  • 我不确定您是否可以在 javascript 中对其进行反序列化。
  • 我在答案中添加了一个正则表达式选项。
【解决方案2】:

objectString 看起来像一个序列化对象(请参阅PHP serialize)。

您需要将 unserialize 放入 PHP 对象中才能使用它的属性(如 $numberLong

您可以查看How to use php serialize() and unserialize() 以获得一些简单的解释。

【讨论】:

  • 如何调用 php 反序列化函数并将 javascript 变量“objectSting”作为
  • 您的问题看起来像是这个问题和您在此处提出的问题的组合 - stackoverflow.com/questions/50906080/…。您想要这里的答案还是那个问题的答案?
  • 已经有答案了,应该会有所帮助。 - 做那里推荐的事情。将您的代码更新为此 - $("#session_start_date").val(getDateString());
  • 您还需要做 1 件事。在 javascript 函数 getDateString 中,您还需要执行此操作 - str = JSON.parse(str); 。这会将字符串转换为可用于获取 datelongNumber 值的 javascript 对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多