使用PHP在JSON嵌套数组输出内部

时间:2014-06-23 06:34:46

标签: php arrays multidimensional-array json

这是我想要的JSON输出

{
   "MainEvent":"Geelong v Essendon",
   "OutcomeDateTime":"2014-06-27 19:51:00.0000000",
   "Competitors":[
      {
         "Name":"Geelong",
         "Win":"1.32"
      },
      {
         "Name":"Essendon",
         "Win":"3.40"
      }
   ]
},
{
  "MainEvent":"Hawthorn v Gold Coast",
  "OutcomeDateTime":"2014-06-28 13:46:00.0000000",
   "Competitors":[
      {
         "Name":"Geedlong",
         "Win":"1.32d"
      },
      {
         "Name":"Essenddon",
         "Win":"3.40d"
      }
   ]
}

这是我的代码

foreach ($SortedByDate as $key => $values){
    foreach ($json_a as $root_element => $childnode) {
        foreach( $childnode as $cKey => $subChild) {
            $rootObj = array(
                'MainEvent' => $subChild['MainEvent'], 
                'OutcomeDateTime' => $subChild['OutcomeDateTime'], 
                foreach($subChild['Competitors']['Competitors'] as $compKey => $compVal) {
                    $teamName = $compVal['Team'];
                    $win = $compVal['Win'];
                    $abc = array(
                        "Team" => $teamName,
                        "Win" => $win,
                    ); 
                }   
            } 
            $rootObj ['Competitors'] = $abc;  
        }} 
         $abc="";
        print json_encode($rootObj );
}

我得到了这个输出。但是我的输出中缺少逗号。有人可以给我一些建议吗?

  {
       "MainEvent":"Geelong v Essendon",
       "OutcomeDateTime":"2014-06-27 19:51:00.0000000",
       "Competitors":[
          {
             "Name":"Geelong",
             "Win":"1.32"
          },
          {
             "Name":"Essendon",
             "Win":"3.40"
          }
       ]
    }
    {
      "MainEvent":"Hawthorn v Gold Coast",
      "OutcomeDateTime":"2014-06-28 13:46:00.0000000",
       "Competitors":[
          {
             "Name":"Geedlong",
             "Win":"1.32d"
          },
          {
             "Name":"Essenddon",
             "Win":"3.40d"
          }
       ]
    }

我试过这些代码,但我不知道如何在输出JSON中添加逗号

2 个答案:

答案 0 :(得分:1)

您必须将根对象包装在另一个数组中:

$rootObjects = [];
foreach ($SortedByDate as $key => $values){
    // ...
    $rootObjects[] = $rootObj;
}
echo json_encode($rootObjects);

它将输出[{object1}, {object2}, ....],即输出包括两个方括号,这些方括号在预期输出中不存在,但对于使其成为有效的JSON非常重要。

答案 1 :(得分:0)

你打印两次,它不会有逗号;

试试这个:

$jsons = array();
    foreach ($SortedByDate as $key => $values){
        foreach ($json_a as $root_element => $childnode) {
            foreach( $childnode as $cKey => $subChild) {
                $rootObj = array(
                    'MainEvent' => $subChild['MainEvent'], 
                    'OutcomeDateTime' => $subChild['OutcomeDateTime'], 
                    foreach($subChild['Competitors']['Competitors'] as $compKey => $compVal) {
                        $teamName = $compVal['Team'];
                        $win = $compVal['Win'];
                        $abc = array(
                            "Team" => $teamName,
                            "Win" => $win,
                        ); 
                    }   
                } 
                $rootObj ['Competitors'] = $abc;  
            }} 
             $abc="";
             $jsons[] = json_encode($rootObj);
    }
print implode(",",$jsons);

对我来说看起来不像是一个有效的JSON

让我知道它是否有效。