2016-01-20 70 views
0

我有一個simpleXML對象,我必須將其轉換爲傳遞給AJAX的JSON。我的解決方案几乎總是工作和JSON返回的是這樣的一個:JSON編碼。強制一個項目始終是一個數組PHP

{ 
    "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不會將值item存儲爲JSON數組,因此我需要該值作爲JSON數組總是。所以我想要的是「強制」創建這樣一個數組。

對於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,但我無法找到要走的路(item並不總是存在,你可以看到)

是否有任何可能的方式來做到這一點?

編輯1:這是我的源XML:

<algorithm_specification> 
     <name>C45</name> 
     <nParameters>3</nParameters> 
     <seed>0</seed> 
     <nOutput>1</nOutput> 
     <parameter> 
     <name>Podado</name> 
     <type>list</type> 
     <domain> 
      <item>TRUE</item> 
      <item>FALSE</item> 
     </domain> 
     <default>TRUE</default> 
     </parameter> 
     <parameter> 
    <name>Confianza</name> 
    <type>real</type> 
    <domain> 
     <lowerB>0</lowerB> 
     <upperB>1</upperB> 
    </domain> 
    <default>0.25</default> 
    </parameter> 
    <parameter> 
    <name>InstanciasPorHoja</name> 
    <type>integer</type> 
    <default>2</default> 
    </parameter> 
</algorithm_specification> 

正如你所看到的,值 「name_orig」 在JSON是讀和解析XML

+0

什麼是你的XML輸入後添加? – Gavriel

+1

你可以遍歷對象,但首先:你確定這是你需要修復'item'的地方嗎?當它不是數組時,你會得到什麼問題? – Shomz

+0

@Gavriel在編輯1是源XML –

回答

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)); 
    } 
+0

完美的作品!非常感謝! –

相關問題