如何在php中序列化反序列化mongodate

时间:2015-04-16 19:52:43

标签: php json mongodb serialization

我目前有很多远程站点运行软件实例并在MongoDB中存储数据。这很好。

我正在开发一个可用于安全地提供端点/远程站点数据的PHP API。到中央系统或其他特定用户。 API以JSON形式提供数据。

我的问题是,当中央系统查询API时,它会获取数据,将数据插入数据库,并且除了MongoDate对象外它工作正常。如果我特意将数据拉出来,使用对象sec和usec字段,然后覆盖该值,它会将正确的ISODate存储在Mongo中。

问题在于系统利用Mongo的动态特性,中央服务可能无法知道Mongo ISODate字段的确切密钥。

如果我直接查询中央Mongo,错误序列化/反序列化ISOD的值是:

    "myTime" : {
        "sec" : NumberLong(1425486541),
        "usec" : NumberLong(105000)
    },

使用普通的Mongo时间查询无法查询这些值。

如果我通过从sec和usec值创建一个新的MongoDate对象来“手动”编辑并重新赋值给中央PHP脚本中的变量,它看起来像:

"myTime" : ISODate("2015-04-16T19:46:46.082Z"),

是否有一种已知的正确方法可以使用PHP在JSON中对MongoDate对象进行序列化和反序列化?

我很想尝试使用标准的PHP对象序列化/反序列化,但只有其他PHP客户端可以使用这些数据。使用JSON会更加可取,因为它是一个更标准的结构。

-

我刚刚发现这个问题讨论了这个问题: https://jira.mongodb.org/browse/PHP-203

MongoDB Extended JSON也支持这种数据类型:http://docs.mongodb.org/manual/reference/mongodb-extended-json/

看起来问题是PHP没有为json_encode和json_decode实现扩展的json格式。

1 个答案:

答案 0 :(得分:-1)

将JSON字符串转换为PHP数组:

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
$arr = json_decode($json, true)
var_dump($arr);

在此之后,您可以像这样使用smt :(仅限示例)

date('d.m.y H:i:s',$arr['myTime']['sec'])