1. ホーム
  2. php

[解決済み] PHPによるXMLからJSONへの変換

2022-04-21 05:36:37

質問

phpでxmlをjsonに変換しようとしています。シンプルなxmlとjson_encodeを使用して単純な変換を行うと、xmlの属性は何も表示されません。

$xml = simplexml_load_file("states.xml");
echo json_encode($xml);

そこで、手動でこのようにパースしようとしています。

foreach($xml->children() as $state)
{
    $states[]= array('state' => $state->name); 
}       
echo json_encode($states);

で、state の出力は {"state":{"0":"Alabama"}} よりも {"state":"Alabama"}

何が間違っているのでしょうか?

XMLです。

<?xml version="1.0" ?>
<states>
    <state id="AL">     
    <name>Alabama</name>
    </state>
    <state id="AK">
        <name>Alaska</name>
    </state>
</states>

出力します。

[{"state":{"0":"Alabama"}},{"state":{"0":"Alaska"}

varのダンプです。

object(SimpleXMLElement)#1 (1) {
["state"]=>
array(2) {
[0]=>
object(SimpleXMLElement)#3 (2) {
  ["@attributes"]=>
  array(1) {
    ["id"]=>
    string(2) "AL"
  }
  ["name"]=>
  string(7) "Alabama"
}
[1]=>
object(SimpleXMLElement)#2 (2) {
  ["@attributes"]=>
  array(1) {
    ["id"]=>
    string(2) "AK"
  }
  ["name"]=>
  string(6) "Alaska"
}
}
}

解決方法は?

json_encodeはオブジェクトと文字列を区別して処理することがわかりました。私はオブジェクトを文字列にキャストし、それは今では動作します。

foreach($xml->children() as $state)
{
    $states[]= array('state' => (string)$state->name); 
}       
echo json_encode($states);