Я уже посмотрел на этот поток: PHP расшифровывал вложенный JSON и не смог использовать его для решения моей проблемы.
Я в настоящее время захватываю объект JSON от Mongo, и у меня возникают проблемы с захватом информации из вложенных объектов.
{ "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), }
Моя цель – распечатать информацию о каждом из элементов, мой 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()); }
Я знаю, что нет проблем с подключением к базе данных или с любыми проблемами окружающей среды, так как другие проявления захваченных данных работают. Это просто гнездование, в чем проблема.
Благодарю.
MongoDB не сохраняет данные как JSON.
Документ, который вы вставили, похоже, копирует и вставляет из оболочки. Это не формат JSON. Этот формат называется Extended JSON – и как оболочка MongoDB представляет данные в javascript. Большинство примеров на веб-сайте MongoDB также используют этот формат, поскольку это просто и просто. Таким образом, вместо того, чтобы иметь десятки разных форматов вывода (для каждого языкового драйвера), официальная документация MongoDB использует оболочку для демонстрации функциональности и вывода.
Фактический формат подкладки называется двоичным JSON (BSON). Вы никогда не увидите этот формат, и вы никогда не будете взаимодействовать с ним.
Когда вы взаимодействуете с MongoDB в PHP, все, что вам нужно знать, это то, что вы сохраняете массив PHP. Данные, возвращаемые MongoDB, также являются массивом PHP. Формат подкладочного диска не имеет значения.
Вам никогда не нужно называть json_encode () или json_decode ().
Метод $collection->find($query)
возвращает объект, называемый MongoCursor. Вы должны перебрать этот объект, чтобы получить результаты, которые будут массивом PHP.
foreach($collection->find($query) as $result) { var_dump($result); }
Этот пример кода будет var_dump () один результат за раз. Этот result
называется «MongoDB Document» и похож на «строку MySQL». Как и в случае с MySQL, вам не нужно знать, что такое подстилающий протокол, или какой формат подкладочного диска – это не влияет на вас.
Я настоятельно рекомендую вам прочитать учебник по PHP-драйверу MongoDB: http://us2.php.net/manual/en/mongo.tutorial.php
Это должно объяснить концепцию немного лучше, вместе с тем, как работает драйвер 🙂