LoginSignup
41
48

More than 5 years have passed since last update.

XMLからJSON形式への変換メモ(PHP)

Last updated at Posted at 2014-01-21

XMLからJSON形式への変換メモ(PHP)

つまづきどころのメモ。

基本形

$obj = simplexml_load_string($xml);
$json = json_encode($obj);

直では変換できないので一旦Objectに直してからjson_encodeする。

CDATAがある場合

そのままでは変換時に値が入らないので、simplexml_load_stringにオプションを指定する

$obj = simplexml_load_string($xml, NULL, LIBXML_NOCDATA);
$json = json_encode($obj);

文字コード

simplexml_load_string を使う場合、
XMLの最初の宣言と中の文字コードが一致している必要がある。

対応していない文字コードの場合、mb_convert_encodingでUTF-8に一旦変換しておき、
XMLのヘッダーを
<?xml version="1.0" encoding="UTF-8" ?>
に無理やり置き換えて読ませる(苦肉の策)

XML → JSONの罠

XMLとJSONは100% 1対1で対応可能なフォーマットではないので、
変換時にトラブルが時々起こります。

要素数1の配列

<items>
  <item>Hoge</item>
</items>

<items>
  <item>Hoge</item>
  <item>Fuga</item>
</items>

では要素数が違うだけでほぼ同じXMLです。

しかし、これをJSONに変換すると

{"item":"Hoge"}

{"item":["Hoge","Fuga"]}

のようになります。
このJSONからHogeを取り出そうとすると、
要素数1の場合は $data["item"] ですが、
要素数2以上の場合 $data[0]["item"] になってしまいます。

要素数に応じて配列が現れたりするので注意しましょう。

特に配列だと思っていた時に、返ってくる要素が1だとパース時に落ちます。

41
48
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
48