2014-04-10 1 views
3

나는 이미이 스레드를 보았습니다 : PHP decode nested JSON 그리고 내 문제를 해결하기 위해 그것을 사용하지 못했습니다.PHP에서 Mongo를 사용하여 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), 
} 

은 각 항목에 대한 정보를 인쇄하는 것입니다, 내 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()); 
} 

을 다음과 같다 잡아 당겨진 데이터의 다른 디스플레이가 작동하기 때문입니다. 여기에 문제가되는 것은 중첩 된 것입니다.

감사합니다.

답변

7

MongoDB는 이 아니며은 JSON으로 데이터를 저장합니다.

붙인 문서는 껍질에서 복사 & 붙여 넣은 것 같습니다. 이것은 JSON 형식이 아닙니다. 이 형식을 확장 JSON이라고하며, MongoDB 셸이 자바 스크립트에서 데이터를 나타내는 방법입니다. MongoDB 웹 사이트의 대부분의 예제도이 형식을 쉽고 간단하게 사용합니다. 따라서 각 언어 드라이버에 대해 수십 가지 다른 출력 형식을 사용하는 대신 MongoDB 공식 문서는 기능 및 출력을 시연하기 위해 셸을 사용합니다.

실제 밑받침 형식을 이진 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); 
} 

이 코드 예제는 한 번에 하나의 결과를 var_dump()합니다. 이 result은 "MongoDB 문서"라고하며 "MySQL 행"과 유사합니다. MySQL과 마찬가지로, 밑에있는 프로토콜이 무엇인지, 또는 밑에있는 디스크 포맷이 무엇인지 알 필요가 없습니다. 이것은 당신에게 아무런 영향을 미치지 않습니다. http://us2.php.net/manual/en/mongo.tutorial.php

이 드라이버가 작동하는 방법 :

+0

이 정보는 우수와 함께, 개념은 littlebit 잘 설명해야한다 :

나는 강하게 당신이 MongoDB를 PHP 드라이버 튜토리얼을 읽으십시오. 데이터를 PHP 배열이 아닌 JSON 객체로 해석했습니다. 감사. –