【问题标题】:MongoDB\BSON\ObjectID Lost In JSON Encode from MongoDBMongoDB\BSON\ObjectID 在来自 MongoDB 的 JSON 编码中丢失
【发布时间】:2016-06-18 13:33:46
【问题描述】:

我在从 MongoDB 数据库中检索 ObjectID 时遇到问题,但是当通过 json_encode 运行时,“_id”值总是消失。我的数组中的所有其他数据都存在。我的代码是这样的:

$data = array('_id' => new MongoDB\BSON\ObjectID(), 'title' => 'abc123');

 //ID Is there!
 print_r($data);
 //ID IS EMPTTYy!!!
 print_r(json_encode($data));
 exit();

结果如下所示:

Array ( [_id] => MongoDB\BSON\ObjectID Object ( [oid] => 56d9d2687e34d70d3a304c46 ) [title] => abc123 ) 

{"_id":{},"title":"abc123"}

至少,_id 中应该有一个对象或数字。我的问题是什么剥离了 \MongoDB\BSON\ObjectID,我怎样才能让它留下来?

【问题讨论】:

  • 请发布你得到的输出,以及你期望的输出。
  • 好的,发布输出

标签: php mongodb objectid


【解决方案1】:

@malarzm 答案的示例代码:

$output = [];
foreach( $data as $key => $val){
    $val->_id = strval($val->_id);
    $output[$key] = $val;
}

echo json_encode( $output );

【讨论】:

    【解决方案2】:

    我的问题是什么剥离了 \MongoDB\BSON\ObjectID

    json_encode 将只编码遇到对象的public 属性。

    我怎样才能让它留下来?

    您可以在编码之前将其转换为字符串。

    【讨论】:

    • 是的,将其转换为字符串确实有效,但对于创建它的开发人员来说,这感觉像是设计缺陷。
    • @DevinDixon 如果有的话,它与 JSON 编码器的工作方式有关,并且它按预期工作。 malarzm 是规范正确的。
    • @Sammitch 是的,malarzm 的答案是正确的,我编写了一个递归 json 函数,将所有项目转换为字符串。我所指的设计缺陷是MongoDB PHP最新更新中已发布的许多功能。只是个人观点,我喜欢极简主义的开发方法,我根据需要创建抽象层。许多 PHP Mongo 特性都有抽象层,这增加了学习实现和重写代码的时间。
    猜你喜欢
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 2019-08-07
    • 1970-01-01
    相关资源
    最近更新 更多