我目前有很多远程站点运行软件实例并在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格式。
答案 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'])