2013-05-02 82 views
0

你好,我已经花了相当多的时间试图让我的数据看起来像这样在JSON作为样本:我似乎无法获取数据到JSON正确

var json = { 
    "id": "347_0", 
    "name": "Nine Inch Nails", 
    "children": [{ 
     "id": "126510_1", 
     "name": "Jerome Dillon", 
     "data": { 
      "band": "Nine Inch Nails", 
      "relation": "member of band" 
     }, 
     "children": [{ 
      "id": "52163_2", 
      "name": "Howlin' Maggie", 
      "data": { 
       "band": "Jerome Dillon", 
       "relation": "member of band" 
      }, 
      "children": [] 
     }, { 
      "id": "324134_3", 
      "name": "nearLY", 
      "data": { 
       "band": "Jerome Dillon", 
       "relation": "member of band" 
      }, 
      "children": [] 
     }] 
    }, { 
     "id": "173871_4", 
     "name": "Charlie Clouser", 
     "data": { 
      "band": "Nine Inch Nails", 
      "relation": "member of band" 
     }, 
     "children": [] 
    }, { 
     "id": "235952_5", 
     "name": "James Woolley", 
     "data": { 
      "band": "Nine Inch Nails", 
      "relation": "member of band" 
     }, 
     "children": [] 
    }, 

我使用json_encode函数和我知道如何使数据到JSON我似乎就是无法创造任何东西,将输出上面的JSON格式...例如我用下面的代码:

foreach($relations as $rel){ 
     $data[$id]["relationTo"] = $rel["name"]; 
     $data[$id]["relation"] = $rel["relation"]; 
     $id = $id + 1; 
    } 
    $id = 0; 
    foreach($relations as $rel){ 
     $children[$id]["id"] = $id+1; 
     $children[$id]["name"] = $rel["sname"]; 
     $children[$id]["data"] = $data[$id]; 
     $id = $id + 1; 
    } 
    $relationsArray["id"] = 0; 
    $relationsArray["name"] = $rel["name"]; 
    $relationsArray["children"] = $children; 

    $json_content = json_encode($relationsArray); 

而这种输出:

"id":0, 
"name":"Al", 
"children":[ 
    { 
    "id":1, 
    "name":"Brandon", 
    "data":{ 
     "relationTo":"Albaraa", 
     "relation":"Friend" 
    }, 
    "children":[ 

    ] 
    }, 
    { 
    "id":2, 
    "name":"Shen", 
    "data":{ 
     "relationTo":"Albaraa", 
     "relation":"Friend" 
    }, 
    "children":[ 

    ] 
    }, 
    { 
    "id":3, 
    "name":"Dan", 
    "data":{ 
     "relationTo":"Albaraa", 
     "relation":"Professor" 
    }, 
    "children":[ 

    ] 
    }, 
    { 
    "id":4, 
    "name":"Bob", 
    "data":{ 
     "relationTo":"Albaraa", 
     "relation":"Boss" 
    }, 
    "children":[ 

    ] 
    }, 
    { 
    "id":5, 
    "name":"Al", 
    "data":{ 
     "relationTo":"Albaraa", 
     "relation":"God Father" 
    }, 
    "children":[ 

    ] 
    }, 
    { 
    "id":6, 
    "name":"Albaraa", 
    "data":{ 
     "relationTo":"Shen", 
     "relation":"Friend" 
    }, 
    "children":[ 

    ] 
    }, 
    { 
    "id":7, 
    "name":"Brandon", 
    "data":{ 
     "relationTo":"Shen", 
     "relation":"Friend" 
    }, 
    "children":[ 

    ] 
    }, 
    { 
    "id":8, 
    "name":"Dan", 
    "data":{ 
     "relationTo":"Shen", 
     "relation":"Professor" 
    }, 
    "children":[ 

    ] 
    }, 
    { 
    "id":9, 
    "name":"Albaraa", 
    "data":{ 
     "relationTo":"Al", 
     "relation":"God Son" 
    }, 
    "children":[ 

    ] 
    }, 
    { 
    "id":10, 
    "name":"Bob", 
    "data":{ 
     "relationTo":"Al", 
     "relation":"Best Friends" 
    }, 
    "children":[ 

    ] 
    } 
] 
} 

等等......但我不能像上面看到的那样让孩子们的孩子们!

任何帮助将是惊人的谢谢!

编辑:

 class Child{ 
     public $id; 
     public $name; 
     public $children; 
     public $data; 

     public function __construct($id, $sname, $data, $rel){ 
      $this->children = array(); 
      $this->data = array(); 
      if ($rel){ 
       $this->id = $id+1; 
       $this->name = $sname;     
       $data = array(); 
       $data["relationTo"] = $rel["name"]; 
       $data["relation"] = $rel["relation"]; 
     $this->children[] = new Child($id, $rel["sname"],$data); 
      } 
      else { 
       $this->id = $id+1; 
       $this->name = $sname; 
       $this->data = $data; 
      } 
     }  
    } 
    $childrel = array(); 
    $id = 0; 
    foreach($relations as $rel){ 
     $childrel[] = new Child($id ,"","", $rel); 
     $id = $id + 1; 
    } 
+1

在第一个字符串中执行'json_decode'。然后进行逆向工程。你将得到数组格式,然后相应地创建新的数组。 – itachi 2013-05-02 07:53:47

+0

在发布的代码中,你永远不会分配'$ children [$ id] [“children”]',所以它不应该出现在json中(它是作为空数组存在的)。发布所有操作'$ children'数组的代码。 – petrch 2013-05-02 08:00:15

+0

我添加了另一个尝试的编辑,通过创建一个类...与我的其他代码我刚刚开始一个新的尝试我不知道如何显示更多的$儿童,在其他$儿童... @ itachi我正在尝试json_decode到目前为止我似乎无法得到此功能工作,但生病继续努力,谢谢! – Baraa 2013-05-02 08:07:22

回答

0

您还没有foreach循环之前分配值之前宣布$孩子。因此,声明这样的数组,并将代码更改为:

$children = array(); 
$id = 0; 
    foreach($relations as $rel){ 
     $children[$id]["id"] = $id+1; 
     $children[$id]["name"] = $rel["sname"]; 
     $children[$id]["data"] = $data[$id]; 
     $id = $id + 1; 
    } 
+0

我实际上声明对不起,我没有在上面的代码中包含这一点,但是我显示了我得到的输出,并且能够将儿童输入到第一个创建的ID /名称中,但是我无法让下一组儿童的孩子等...... – Baraa 2013-05-02 08:08:32