我有一个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答案 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));
}