QT SOLAR 愛島発電所
- 本日の発電量
- 1729 kWh
- 現在の日射量
- 0 Wh/㎡
- 現在の外気温
- 3.4 ℃
(2024/12/10 23:03 更新)
QT SOLAR 愛島発電所
(2024/12/10 23:03 更新)
QT SOLAR 下増田発電所
(2024/12/10 23:00 更新)
QT SOLAR 北原東発電所
(2024/12/10 23:19 更新)
QT SOLAR 長久良辺発電所
(2024/12/10 23:13 更新)
QT SOLAR 白坂発電所
(2024/12/10 22:47 更新)
QT SOLAR 清水沢発電所
(2024/12/10 23:15 更新)
スカラー、アレイ、ハッシュなどのデータからJavaScriptなどで利用できるJSON形式のデータを生成(整形・変換)します。入れ子(ネスト)にも対応。
得たいデータはこんな感じ。
{ "title":"Biographies", "list":["Haruna","Yuki","Mayu"], "biography":{"born":"birth day","height":"body height","measurements":"bust(cup)/waist/hips"}, "biographies":{ "Haruna":{"born":"April 19","height":164,"measurements":["80D","60",86]}, "Mayu":{"born":"March 26","height":156,"measurements":["71A","55",82]}, "Yuki":{"born":"July 15"},"height":164,"measurements":["75C","54",81]} }
木構造(ツリー)なので、ルートからノードとブランチを辿っていってリーフに到達できる必要があります。要は配列の中に配列があるようなデータ構造ですね。
配列の要素として配列を持つような場合、Perlでは参照を使って表現しますよね。なので、そのような構造をJSONに置き換えます。
要素が数字であった場合、その数字が文字なのか数値なのかの判定はPerl内部での扱いに準じます。
JSON形式のデータを生成するパッケージモジュール。
JsonUtility.pm
package JsonUtility; sub new { my $class = shift; my $self = { ref => "", }; return bless $self, $class; } #-------------------------------------------------------------------------------------- # set(送信対象データの参照をセット) #-------------------------------------------------------------------------------------- sub set { my($self) = shift; $self->{ref} = shift; } #-------------------------------------------------------------------------------------- # remove(送信対象データの参照を削除) #-------------------------------------------------------------------------------------- sub remove { my($self) = shift; if($self->{ref}){ delete($self->{ref}); } } # -------------------------------------------------------------------------------------- # JSONデータ作成(再帰) # -------------------------------------------------------------------------------------- sub _make { my $self = shift; my $ref = shift; my $json = ""; if(!ref($ref)){ $val = $ref; unless(defined $val){ return "null"; } if(($val^$val) eq '0'){ return $val; } $val =~ s/("|\/|\\|\r|\n|\t)/\\$1/sg; return "\"$val\""; }elsif(ref($ref) eq "SCALAR"){ return $self->_make($$ref); }elsif(ref($ref) eq "ARRAY" ){ my $val = "["; foreach(@$ref){ $val .= $self->_make($_); $val .= ","; } $val =~ s/,$//s; $val .= "]"; return $val; }elsif(ref($ref) eq "HASH" ){ $json = "{"; foreach my $key ( keys %$ref ) { my $val = $self->_make($$ref{$key}); $json .= "\"$key\":$val"; $json .= ","; } $json =~ s/,$//s; $json .= "}"; return $json; } return ""; } # -------------------------------------------------------------------------------------- # JSON形式のデータを得る # -------------------------------------------------------------------------------------- sub get { my($self) = shift; my($ref) = shift; if($ref){ return $self->_make($ref); }elsif($self->{ref}){ return $self->_make($self->{ref}); } return ""; } 1;
使い方。
#!/usr/bin/perl use strict; use warnings; use JsonUtility; # JsonUtility my $js = JsonUtility->new(); my $title = "Biographies"; my @list = ("Haruna", "Yuki", "Mayu"); my %biography = ( "born","birth day", "height","body height", "measurements","bust(cup)/waist/hips" ); my @haruna_measure = ("80D",'60',86); my @yuki_measure = ("75C",'54',81); my @mayu_measure = ("71A",'55',82); my %haruna = ( "born","April 19", "height",164, "measurements",\@haruna_measure ); my %yuki = ( "born","July 15", "height",164, "measurements",\@yuki_measure ); my %mayu = ( "born","March 26", "height",156, "measurements",\@mayu_measure ); my %biographies = ( "Haruna", \%haruna, "Yuki", \%yuki, "Mayu", \%mayu ); my %data = ( "title", \$title, "list", \@list, "biography", \%biography, "biographies",\%biographies, ); my $json_string = $js->get(\%data); print "Content-type:application/json;charset=UTF-8\n\n"; print "$json_string\n"; exit;
Perlのハッシュはデータ配置が不定(配列のように追加した順に並んでいるわけではない)のため、生成されるJSONのデータもキーと値のペアがどのように配置されるかは不定です。
ほとんどの場合、標準実装されているJSON::PPモジュールで事足りるでしょう。このページの自前モジュールはもともと古いバージョンのPerlが残っていた時代に作られたものです。
宮城県仙台市太白区長町一丁目2-11
[運営者]
[発電所]
本ウェブサイト上のQT SOLAR 発電所は、グループ会社の発電所も含まれます。