JSON编码。强制项目始终是PHP数组

时间:2016-01-20 23:09:04

标签: php arrays json

我有一个simpleXML对象,我必须将它转换为JSON才能传递给AJAX。我的解决方案几乎总是有效,返回的JSON就像这样:

{
   "error":false,
"data":{
  "name":"C45",
  "nParameters":"3",
  "seed":"0",
  "nOutput":"1",
  "parameter":[
     {
        "name":"Podado",
        "type":"list",
        "domain":{
           "item":[
              "TRUE",
              "FALSE"
           ]
        },
        "default":"TRUE",
        "name_orig":"pruned"
     },
     {
        "name":"Confianza",
        "type":"real",
        "domain":{
           "lowerB":"0",
           "upperB":"1"
        },
        "default":"0.25",
        "name_orig":"confidence"
     },
     {
        "name":"InstanciasPorHoja",
        "type":"integer",
        "default":"2",
        "name_orig":"instancesPerLeaf"
     }
  ]
}
}

如您所见,有一个名为item的值。此项目具有可变长度,并且在XML文件中出现问题时,标记item仅作为标记domain的子项出现一次,因为生成的JSON不会存储值{{ 1}}作为JSON数组,我总是需要该值作为JSON数组。所以我想要的是"强迫"创建像数组这样的值。

对于item我有同样的问题,但我可以用这段代码解决它:

parameter

我一直试图以相同的方式应用if ($parsedXML_actual->nParameters <= 1) { $xmlArray = (array) $parsedXML_actual; if ($parsedXML_actual->nParameters == 1) { $a = array($parsedXML_actual->parameter); } else { $a = array(); } $xmlArray['parameter'] = $a; echo json_encode(array('error' => false, 'data' => $xmlArray)); } ,但我找不到安全降低等级的方法(item并不总是存在,就像你一样可以看到)

有没有办法做到这一点?

编辑1:这是我的源XML:

item

正如您所见,Value&#34; name_orig&#34;在读取并解析xml

后添加JSON

1 个答案:

答案 0 :(得分:0)

   if ($parsedXML_actual->nParameters <= 1) {
        $xmlArray = (array) $parsedXML_actual;
        if ($parsedXML_actual->nParameters == 1) {
            $a = array($parsedXML_actual->parameter);
        } else {
            $a = array();
        }
        for ($i=0;$i<count($a);$i++)
            if (!isset($a[$i]['domain'])) {
                $a[$i]['domain'] = array();
            }
            if (!isset($a[$i]['domain']['item'])) {
                $a[$i]['domain']['item'] = array();
            }
            if (!is_array($a[$i]['domain']['item'])) {
                $a[$i]['domain']['item'] = array($a[$i]['domain']['item']);
            }
        }
        $xmlArray['parameter'] = $a;
        echo json_encode(array('error' => false, 'data' => $xmlArray));
    }