Webに公開されているJSON形式のファイルをPerl経由で

MySQLに流し込みたいのですがうまく行きません。

下記の print $perl_out;が ARRAY(0x937dc28)  と出力されます。
  - これはどういう意味でしょうか?
- これをMySQLに流し込むことは可能でしょうか?

よろしくお願い致します。


-------------------------------------

#!/usr/bin/perl \


use strict;
use warnings;
use Data::Dumper;
use JSON;

my $json_in = ' [{"name": "Wetpaint",
"permalink": "wetpaint"},
{"name": "AdventNet",
"permalink": "adventnet"},
{"name": "Zoho",
"permalink": "zoho"},
{"name": "Digg",
"permalink": "digg"} ] ';

my $perl_out = decode_json($json_in);

print $perl_out;

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/12/21 18:09:01
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:tkyk3 No.4

回答回数60ベストアンサー獲得回数7

ポイント100pt

実際にJSONデータをMySQLに落とし込むサンプルにしてみました。

#HTML表示出力する

の所はおまけです。Dumperでどんなデータだったか表示しているだけです。

#!/usr/bin/perl
use strict;
use warnings;
use lib qw(./);
use Data::Dumper;
use JSON;
use DBI;
use CGI qw(:standard -no_xhtml);

my $q = new CGI;

my $user = '';
my $passwd = '';
my $table_name = 'testtable';
my $db = DBI->connect('DBI:mysql:testdb:localhost', $user, $passwd);
my $sth;

my $json_in = ' [{"name": "Wetpaint",
"permalink": "wetpaint"},
{"name": "AdventNet",
"permalink": "adventnet"},
{"name": "Zoho",
"permalink": "zoho"},
{"name": "Digg",
"permalink": "digg"} ] ';

my $outdata = decode_json($json_in);

# データをMySQLにINSERTする
foreach my $data (@{$outdata}) { # 配列毎に処理する
	my $name = $data->{name};
	my $permalink = $data->{permalink};
	$sth = $db->prepare("insert into $table_name (name , permalink) values (? , ?);");
	$sth->execute($name, $permalink);
}
$sth->finish;
$db->disconnect;

#HTML表示出力する
print $q->header( '-Content-Type'	=> 'text/html',
		  '-charset' 		=> 'UTF-8',
		);
print "<pre>". Dumper($outdata) . "</pre>";
id:katsuya777

ありがとうございます! うまく行きました。 

コードまで書いて頂き感激です。

2010/12/21 18:08:13

その他の回答4件)

id:asuka645 No.1

回答回数856ベストアンサー獲得回数97

ポイント28pt
  • これはどういう意味でしょうか?

格納されたオブジェクトのアドレスを示しています。


  • これをMySQLに流し込むことは可能でしょうか?

できません。

JSONは構造を持っていますから、その構造をどのような形でMySQLに反映させるかで、格納の仕方が変わってきます。


参考「JSON - JSONデータの解析 / Perlモジュール徹底解説

id:katsuya777

ありがとうございます。

上記JSONの構造をテーブル上に変換し

MySQLに格納するにはどうしたらよいでしょうか?

やり方が記載されているURL等でも構いません。

2010/12/19 17:14:15
id:okamotoy No.2

回答回数131ベストアンサー獲得回数15

ポイント18pt

 Perlからリレーショナルデータベースを操作するには,「DBD」「DBI」モジュール使う方法我あります.

id:asuka645 No.3

回答回数856ベストアンサー獲得回数97

ポイント18pt

上記JSONの構造をテーブル上に変換し

仰っている意味が分かりません。


JSONからCREATE TABLEするには、JSON側に必要が情報が不足しています。


既存のTABLEにINSERTするという意味ならば、

TABLEの構造が分からないとお答えしようがありません。

id:tkyk3 No.4

回答回数60ベストアンサー獲得回数7ここでベストアンサー

ポイント100pt

実際にJSONデータをMySQLに落とし込むサンプルにしてみました。

#HTML表示出力する

の所はおまけです。Dumperでどんなデータだったか表示しているだけです。

#!/usr/bin/perl
use strict;
use warnings;
use lib qw(./);
use Data::Dumper;
use JSON;
use DBI;
use CGI qw(:standard -no_xhtml);

my $q = new CGI;

my $user = '';
my $passwd = '';
my $table_name = 'testtable';
my $db = DBI->connect('DBI:mysql:testdb:localhost', $user, $passwd);
my $sth;

my $json_in = ' [{"name": "Wetpaint",
"permalink": "wetpaint"},
{"name": "AdventNet",
"permalink": "adventnet"},
{"name": "Zoho",
"permalink": "zoho"},
{"name": "Digg",
"permalink": "digg"} ] ';

my $outdata = decode_json($json_in);

# データをMySQLにINSERTする
foreach my $data (@{$outdata}) { # 配列毎に処理する
	my $name = $data->{name};
	my $permalink = $data->{permalink};
	$sth = $db->prepare("insert into $table_name (name , permalink) values (? , ?);");
	$sth->execute($name, $permalink);
}
$sth->finish;
$db->disconnect;

#HTML表示出力する
print $q->header( '-Content-Type'	=> 'text/html',
		  '-charset' 		=> 'UTF-8',
		);
print "<pre>". Dumper($outdata) . "</pre>";
id:katsuya777

ありがとうございます! うまく行きました。 

コードまで書いて頂き感激です。

2010/12/21 18:08:13
id:tkyk3 No.5

回答回数60ベストアンサー獲得回数7

ポイント18pt

忘れていました。補足です。

MySQL側で一旦テーブルを作成してください。

SQLで


みたいなのを想定しています。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません