【问题标题】:I cannot seem to get data into JSON correctly我似乎无法正确地将数据输入 JSON
【发布时间】:2013-05-02 07:49:45
【问题描述】:

您好,我花了很多时间试图让我的数据在 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;
    }

【问题讨论】:

  • 在第一个字符串中执行 json_decode。然后对其进行逆向工程。然后您将获得数组格式并相应地制作新数组。
  • 在发布的代码中,您永远不会分配 $children[$id]["children"],因此它根本不应该出现在 json 中(它作为空数组存在)。发布所有操作 $children 数组的代码。
  • 我通过创建一个类添加了另一个尝试的编辑......使用我的其他代码我刚刚开始一个新的尝试我不知道我将如何显示更多的 $children其他 $children ... @itachi 我正在尝试 json_decode 到目前为止,我似乎无法使此功能正常工作,但我会继续努力,谢谢!

标签: php arrays class json


【解决方案1】:

在 foreach 循环之前为 $children 赋值之前,您还没有声明它。因此像这样声明数组并将代码更改为此

$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;
    }

【讨论】:

  • 我真的很抱歉我没有在上面的代码中包含它,但我显示了我得到的输出,我可以将孩子输入到第一个创建的 id/name 但我不能得到下一组孩子的孩子,依此类推......
猜你喜欢
  • 2014-05-21
  • 2021-05-16
  • 2011-08-31
  • 1970-01-01
  • 2018-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-02
相关资源
最近更新 更多