Kawa.netブログ(川崎有亮)

アクセスカウンタ

help リーダーに追加 RSS [JSON] xml2json.pl - XMLファイルをJSONに変換するスクリプト

<<   作成日時 : 2006/05/01 13:41   >>

トラックバック 1 / コメント 0

↓は RSS/RDF/Atom 専用のためアイテム件数制限や要素制限の処理が入っていたので、
スクリプトが少し長くなってしまっていたけど、フィードに限らず汎用化して
単に XML ファイルを JSON 変換するだけなら、もっと単純になると思った。

http://kawa.at.webry.info/200605/article_1.html
rss2json.pl
クライアント側 JavaScript では、XML.ParseXML を利用しています。
サーバ側 Perl では、XML::FeedPP を使って JSON に変換しました。
参考に、RSS→JSON 変換のスクリプトを置いておきます。

以下が XML→JSON 変換のスクリプト。
JSON で出力しておけば、JavaScript 側で XML.ObjTree とかを使って
XML を JavaScript オブジェクトに展開する必要がなくなって速いです。

#!/usr/bin/perl
# xml2json.pl
# Copyright 2006 Yusuke Kawasaki http://www.kawa.net/

use strict;
use XML::TreePP;
use JSON::Syck;

my $xml = shift @ARGV || '-';
my $json = shift @ARGV || '-';

my $tpp = XML::TreePP->new();
$tpp->set( force_array => [ 'rdf:li', 'item', 'entry' ] );
$tpp->set( attr_prefix => '@' );
my $tree = $tpp->parsefile( $xml );
my $text = JSON::Syck::Dump( $tree );

open( OUT, "> $json" ) or die "$! - $json\n";
print OUT $text;
close( OUT );

XML::TreePP・JSON::Syck は CPAN でインストールする必要があります。

第1引数が入力XMLファイル名、第2引数が出力JSONファイル名です。
perl xml2json.pl input.xml output.json
のように使用します。
引数を省略した場合は、標準入出力『-』を使います。

7:    use JSON::Syck;
16:   my $text = JSON::Syck::Dump( $tree );
        ↓
7:    use JSON;
16:   my $text = JSON::objToJson( $tree );
と変更すれば、Audrey さんの JSON::Syck じゃなくて Pure Perl 実装の
JSON モジュールを使えます。
XML::TreePP も Pure Perl なので、CPAN がない環境でも利用できます。

13:   $tpp->set( force_array => [ 'rdf:li', 'item', 'entry' ] );
には「複数登場することが予め分かっている要素名」を並べると吉です。
指定しなくても自動判別してくれるので、必須ではないです。

14:   $tpp->set( attr_prefix => '@' );
XML要素の属性名の先頭につけるプリフィックスを指定します。
デフォルトは「-」なので、JSON用ならE4X風に「@」指定が今のオススメです。

15:   my $tree = $tpp->parsefile( $xml );
        ↓
15:   my $tree = $tpp->parsehttp( GET => $xml );
と変更すれば、サーバ上のXMLファイルを拾って来ます。
XMLHTTPRequest ではないので、もちろん外のサーバにもアクセスできます。
XML→JSON のプロキシサービスとかもスグ作れますね。
(プロキシは不正利用されないようにURL制限とか入れる必要があるけど)

設定テーマ

関連テーマ 一覧

月別リンク

トラックバック(1件)

タイトル (本文) ブログ名/日時
rss2json:RSS(XML)からJSONに変換する方法まとめ(てかYahoo!Pipesでいい...
いまさらかもしれないけどね。 ■Perlな方法  ・[JSON] コイツ、速いぞ... ...続きを見る
creazy photograph
2007/12/17 02:11

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文

EDGE Now!