Str*_*ugh 3 php json mongodb mongodb-php
我已经看过这个帖子:PHP解码嵌套的JSON并且没有设法用它来解决我的问题.
我目前正在从Mongo抓取一个JSON对象,我遇到了从嵌套对象中获取信息的问题.
{
"adminLevel" : 200,
"chat" : true,
"clans" : [
BinData(0,"wcXHR577OVBXfy9JwEf5gQAAAAAAAAAAAAAAAAAAAAAAAAAAAA")
],
"experience" : NumberLong(70003),
"kitNew" : {
"converted" : true,
"items" : {
"ak47" : {
"killCount" : 5,
"selected" : false,
"unlocked" : 1
},
"hub-knife" : {
"selected" : false
},
"assault" : {
"selected" : false,
"unlocked" : 1
},
"pistol" : {
"deathWhileSelectedCount" : 3,
"killedBySelectedCount" : 1,
"killWhileSelectedCount" : 1,
"selected" : false,
"unlocked" : 1
},
"m1014" : {
"deathWhileSelectedCount" : 3,
"killedBySelectedCount" : 1,
"killCount" : 17,
"killWhileSelectedCount" : 1,
"killedByCount" : 1,
"selected" : false,
"unlocked" : 1
},
},
},
"points" : NumberLong(87167),
}
Run Code Online (Sandbox Code Playgroud)
我的目标是打印出有关每个项目的信息,我的PHP代码如下
// execute query
// retrieve all documents
$query = array("lastKnownUsername" => "Strubo");
$cursor = $collection->find($query);
$array = json_decode($cursor, true);
$items = $array->kitNew->items;
foreach($items as $item){
echo "<tr>";
echo "<td>" . $item . "</td>";
echo "<td>" . $item->killCount . "</td>";
echo "<td>" . $item->killedByCount . "</td>";
echo "<td>" . $item->selected . "</td>";
echo "<td>" . $item->unlocked . "</td>";
echo "</tr>";
}
// disconnect from server
$conn->close();
} catch (MongoConnectionException $e) {
die('Error connecting to MongoDB server');
} catch (MongoException $e) {
die('Error: ' . $e->getMessage());
}
Run Code Online (Sandbox Code Playgroud)
我知道连接到数据库或任何环境问题没有问题,因为其他显示的抓取数据工作.它只是嵌套这是问题所在.
谢谢.
MongoDB的确实不是数据存储为JSON.
您粘贴的文档似乎是从shell复制和粘贴的.这也不是JSON格式.这种格式称为扩展JSON - 是MongoDB shell如何在javascript中表示数据.MongoDB网站上的大多数示例也使用此格式,因为它简单易用.因此,而不是有几十种不同的输出格式(对于每种语言驱动程序),MongoDB官方文档使用shell来演示功能和输出.
实际的底层格式称为二进制JSON(BSON).你永远不会看到这种格式,你永远不会与它互动.
当您使用PHP与MongoDB交互时,您必须知道的是保存PHP数组.从MongoDB返回的数据也是一个PHP数组.底层磁盘格式不相关.
你永远不必调用json_encode()或json_decode().
该$collection->find($query)方法返回一个名为MongoCursor的对象.您应该遍历此对象以获取结果,这将是一个PHP数组.
foreach($collection->find($query) as $result) {
var_dump($result);
}
Run Code Online (Sandbox Code Playgroud)
这个代码示例将var_dump()一次一个结果.这result称为"MongoDB文档",类似于"MySQL行".就像MySQL一样,您不必知道底层协议是什么,或底层磁盘格式是什么 - 这对您没有任何影响.
我强烈建议您阅读MongoDB PHP驱动程序教程:http://us2.php.net/manual/en/mongo.tutorial.php
这应该更好地解释这个概念,以及驱动程序如何工作:)
| 归档时间: |
|
| 查看次数: |
2369 次 |
| 最近记录: |