2012-12-14 6 views
5

Ich versuche mit der json_encoding für etwa zwei Stunden, aber iam nicht die Ausgabe wie erforderlich. Eigentlich ist dies eine Voraussetzung für die mobilen Anwendungsentwickler, die in dem Format fragen, die ich here.The Code unten erklären ist, was ich versucht habe:PHP json_encoding Daten mit Eltern und Kind Kategorien

include_once("class_connection.php"); 

//Getting the Parent Category 

$sqlStr = mysql_query("select catname , id from `category` where `parentid`='0'"); 
$jsonArray = array(); 

while ($fetchStr = mysql_fetch_assoc($sqlStr)) { 

    $jsonArray[] = array("ParentCategory" => $fetchStr["catname"]); 
     $id = $fetchStr['id']; 

    //Getting child categories from the above parent 

    $sqlChildStr = mysql_query("SELECT catname,id,parentid FROM `category` where `parentid`='$id'"); 

    while ($fetchchildStr = mysql_fetch_assoc($sqlChildStr)) { 

     $jsonArray[] = array("ChildCategory" => $fetchchildStr["catname"]); 
    } 

} 

echo json_encode(array("JsonOutput" => $jsonArray)) . "<br />"; 

Die Ausgabe lautet:

"JsonOutput":[{"ParentCategory":"Animals"},{"ChildCategory":"Bear"},{"ChildCategory":"Deer"},{"ChildCategory":"Dolphins"}, 
{"ParentCategory":"Art"},{"ChildCategory":"Hand Painting"},{"ChildCategory":"Painting"},{"ChildCategory":"3D"},{"ChildCategory":"Abstract"}]} 

Hier In der obigen Ausgabe ist das übergeordnete Kategorie-Array leer ohne sein Kind-Kategorie-Array. Ich möchte in seiner übergeordneten Kategorie Array alle die Kind Kategorie Array speichern, und ich habe schließlich beide Eltern und Kind Kategorie in die JsonOutput Array zu speichern, so dass ich die Ausgabe als

"JsonOutput":[{ 
"ParentCategory":"Animals" : [{ 
    {"ChildCategory":"Bear"},{"ChildCategory":"Deer"},{"ChildCategory":"Dolphins"} 
]} 
"ParentCategory":"Arts" : [{ 
    {"ChildCategory":"Hand Painting"},{"ChildCategory":"Painting"},{"ChildCategory":"3D"}, {"ChildCategory":"Abstract"} 
]} 
]} 
will
+3

Ihre gewünschte Ausgabe sieht für mich nicht wie gültiger JSON aus. –

+4

Sie scheinen Ihre JSON-Ausgabe zu formatieren (oder zu verschönern). Aber warum ist das überhaupt nötig? Werden Menschen es verarbeiten? –

+0

@Pekka: Schauen Sie genauer hin, es ist nicht unbedingt über die Verschönerung: '" ParentCategory ":" Animals ": [{' <- nur um ungültige JSON zu erstellen. – hakre

Antwort

2

Sie dies wahrscheinlich tun müssen, um (nur die wichtigen Bits dargestellt):

$jsonArray = array(); 
while ($parentCat = mysql_fetch_assoc($sqlStr)) { 
    $temp = array(
     "ParentCategory" => $parentCat["catname"] 
    ); 
    while ($childCat = mysql_fetch_assoc($sqlChildStr)) { 
     $temp["ChildCategory"][] = array(
      "ChildCategory" => $childCat["catname"] 
     ); 
    } 
    $jsonArray[] = $temp; 
} 

ich verwenden, um eine temporäre Variable zum Speichern und manipuliere die Elternkategorie. Dies wird am Ende der Schleife zum Haupt-Array hinzugefügt.

+0

Vielen Dank für die Hilfe. Es funktioniert gut. – raduns

0

Sie bitte die folgenden Codes verwenden, gibt der Index innerhalb der while-Schleife ...

$jsonArray = {}; 
while ($fetchStr = mysql_fetch_assoc($sqlStr)) { 

    //$jsonArray[] = array("ParentCategory" => $fetchStr["catname"]); 
     $id = $fetchStr['id']; 

    //Getting child categories from the above parent 

    $sqlChildStr = mysql_query("SELECT catname,id,parentid FROM `category` where `parentid`='$id'"); 

    while ($fetchchildStr = mysql_fetch_assoc($sqlChildStr)) { 

     $jsonArray["ParentCategory"][$fetchStr["catname"]] = array("ChildCategory" => $fetchchildStr["catname"]); 
    } 

} 

echo json_encode(array("JsonOutput" => $jsonArray)) . "<br />";