FlutterでXMLをJSONへ簡単変換!xml2json

現在ではREST APIの多くがJSONを採用していますが、業務システムやレガシーシステムでは、今でもXML形式のデータを扱うケースが少なくありません。

例えば、

  • RSSフィードの取得
  • SOAP APIとの連携
  • ECサイトの商品情報取得
  • 気象データの取得
  • 各種業務システムとの連携

などではXMLが利用されています。

FlutterではJSONを扱うことは簡単ですが、XMLをそのまま扱うのは少し面倒です。

そんなときに便利なのが xml2json パッケージです。

この記事では、XMLをJSONへ変換できる「xml2json」の使い方や特徴を解説します。


xml2jsonとは?

xml2jsonは、XML文字列を解析し、JSON形式へ変換できるDartライブラリです。

内部では xml パッケージを利用してXMLを解析し、用途に応じて複数の変換方式でJSONへ変換できます。現在は以下の4つの変換方式をサポートしています。

  • Parker
  • Parker(属性付き)
  • Badgerfish
  • GData
  • OpenRally

Flutterだけでなく、純粋なDartプロジェクトでも利用できます。


インストール

まずは pubspec.yaml に追加します。

dependencies:
  xml2json: ^6.2.7

続いて、

flutter pub get

を実行します。


基本的な使い方

まずはライブラリを読み込みます。

import 'package:xml2json/xml2json.dart';

XMLを読み込みます。

const xml = '''
<book>
  <title>Flutter入門</title>
  <price>2980</price>
</book>
''';

パーサーを作成します。

final transformer = Xml2Json();

transformer.parse(xml);

これでXMLを解析できます。


Parker形式へ変換

もっともシンプルな変換方法です。

final json = transformer.toParker();

print(json);

結果

{
  "title": "Flutter入門",
  "price": "2980"
}

余分な情報を含まないため、シンプルなXMLを扱う場合におすすめです。


Badgerfish形式へ変換

XMLの属性も保持したい場合はBadgerfish形式を利用します。

XML

<book id="1">
  <title>Flutter入門</title>
</book>

変換

final json =
    transformer.toBadgerfish();

結果

{
  "book": {
    "@id": "1",
    "title": {
      "$": "Flutter入門"
    }
  }
}

属性情報まで保持できるため、XMLをほぼ完全な形でJSONへ変換できます。


GData形式へ変換

Google Data APIで利用されていた形式にも対応しています。

final json =
    transformer.toGData();

Google系サービスとの連携などで利用されるケースがあります。


OpenRally形式へ変換

最新版ではOpenRally形式もサポートされています。

final json =
    transformer.toOpenRally();

用途に応じて変換方式を選択できます。


RSSフィードを解析する

RSSは代表的なXMLデータです。

例えば取得したXMLを

transformer.parse(rssXml);

final json =
    transformer.toParker();

とするだけでJSONへ変換できます。

その後は

final map =
    jsonDecode(json);

として通常のJSONと同じように扱えます。


HTTPレスポンスとの組み合わせ

例えばXML APIへアクセスした場合、

final response =
    await http.get(uri);

transformer.parse(
    response.body);

final json =
    transformer.toParker();

これだけでXMLレスポンスをJSONへ変換できます。

FlutterではJSON操作に慣れている開発者が多いため、XMLを直接扱うよりも実装しやすくなります。


jsonDecodeでMapへ変換

取得したJSON文字列は、

import 'dart:convert';

final map =
    jsonDecode(json);

print(map['title']);

のように通常のJSONとして利用できます。


変換方式の違い

方式属性保持用途
Parker×シンプルなXML
Parker(属性付き)軽量かつ属性も必要な場合
BadgerfishXML構造をできるだけ保持
GDataGoogle Data API互換
OpenRallyOpenRally形式が必要な場合

用途に応じて最適な変換方式を選択しましょう。


主な活用シーン

RSSリーダー

RSSフィードをJSONとして扱えます。

SOAP API

SOAPレスポンスを解析できます。

レガシーシステム連携

XMLベースの社内システムとの通信に利用できます。

ECサイト

商品情報XMLの解析に便利です。

気象・公共API

XML形式で提供されるオープンデータにも活用できます。


メリット

XMLを簡単にJSON化できる

数行のコードだけで変換できます。

複数の変換方式に対応

用途に応じてParkerやBadgerfishなどを選択できます。

Dart・Flutter両対応

Flutterだけでなく、サーバーサイドDartでも利用可能です。

クロスプラットフォーム対応

Android・iOS・Web・Windows・macOS・Linuxすべてで利用できます。


注意点

JSONの構造は変換方式によって異なる

ParkerとBadgerfishでは生成されるJSON構造が大きく異なります。

シンプルなXMLであればParker、属性や名前空間を保持したい場合はBadgerfishを選ぶのがおすすめです。

XMLの完全な再現が目的ではない

xml2jsonは「XMLを扱いやすいJSONへ変換する」ためのライブラリです。

変換方式によってはコメントや一部のXML固有情報は保持されない場合があります。


まとめ

xml2jsonは、FlutterやDartでXMLデータを扱う際に非常に便利なライブラリです。

特に、

  • RSSフィードの解析
  • SOAP APIとの連携
  • レガシーシステム対応
  • XMLベースのWeb API

などでは活躍します。

また、Parker・Badgerfish・GData・OpenRallyといった複数の変換方式に対応しているため、用途に応じて最適なJSON形式を選択できる点も大きな魅力です。XMLをJSONへ変換して、Flutterで扱いやすいデータ構造にしたい場合は、ぜひ活用してみてください。

タイトルとURLをコピーしました