pythonとperlとphpとas3とjavascriptでJSON このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加

扱う言語が多くなってきて、特定の処理を思い出せずにイライラする事が頻発しています。そこで自分が使う各言語でスニペット付きでまとめる事にしました。第一弾はJSONの扱いです。連想配列をJSONにencodeして、再度decodeという基本的な流れを書きました。

python
2.6系だとJSONが標準で組み込まれてるらしいんですが、手元は2.5系なのでsimplejsonを使っています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys, codecs
sys.stdout = codecs.getwriter('utf_8')(sys.stdout)
 
import simplejson
 
data = { 'items':[
  {'name':'iPhone',  'price':50000},
  {'name':'macbook', 'price':100000},
  {'name':"マクド",  'price':100},
]}
text = simplejson.dumps(data)  # encode
copy = simplejson.loads(text)  # decode
 
print "data = " + str(data)
print "text = " + text
print "copy = " + str(copy)
for item in copy['items']:
  print item["name"]

perl
perlはJSON.pm。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/perl
 
use strict;
use warnings;
use Data::Dump qw(dump);
 
use JSON;
 
my $data = {'items' => [
  {'name' => 'iPhone',  'price' => 50000},
  {'name' => 'macbook', 'price' => 100000},
  {'name' => 'マクド',  'price' => 100},               
]};
my $text = encode_json($data);
my $copy = decode_json($text);
 
print "data = " . dump($data), "\n";
print "text = " . $text, "\n";
print "copy = " . dump($copy), "\n";
for my $item (@{ $copy->{"items"} }) {
    print $item->{"name"}, "\n";
}

php
phpは5.2系以降で標準でphp-jsonライブラリが組み込まれているようです。それ以前の場合はpeclで別途インストールします。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/php
< ?php
$data = array('items' => array(
    array('name' => 'iPhone',  'price' => 50000),
    array('name' => 'macbook', 'price' => 100000),
    array('name' => 'マクド',  'price' => 100)
  )
);
$text = json_encode($data);
$copy = json_decode($text, true);
 
var_dump($data);
print $text . "\n";
var_dump($copy);
foreach ($copy["items"] as $item) {
  print $item["name"] . "\n";
}
?>

as3
as3ではas3corelibを使います。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package {
    import flash.display.Sprite;
    import com.adobe.serialization.json.JSON;
 
    public class JsonTest extends Sprite {
        function JsonTest() {
            var data:Object = {
                items: [
                    { name:"iPhone",  price:50000  },
                    { name:"macbook", price:100000 },
                    { name:"マクド",  price:100    }
                ]
            };
            var text:String = JSON.encode(data);
            var copy:Object = JSON.decode(text);
 
            log(data);
            log(text);
            log(copy);
            for each (var item:Object in copy["items"]) {
                log(item["name"]);
            }
        }
    }
}

javascript
javascriptは色々方法があるようですが、僕はjson2.jsを使っています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<html>
  <head>
    <script type="text/javascript" src="json2.js"></script>
    <script type="text/javascript">
      var data = { 'items':[
        {'name':'iPhone',  'price':50000},
        {'name':'macbook', 'price':100000},
        {'name':'マクド',  'price':100},
      ]};
      var text = JSON.stringify(data);  // encode
      var copy = JSON.parse(text);      // decode
 
      alert(data);
      alert(text);
      alert(copy);
      for (var i in copy["items"]) {
        alert(copy["items"][i]["name"]);
      }
    </script>
</head>
</html>

どの言語もほぼ同じように処理できていて、JSONは連想配列が使える言語と相性が本当にいいですね。中でもjavascriptがやっぱり一番簡単に扱えてる気がします。perlはリファレンスの扱いが面倒で、phpはarrayにシンタックスシュガーを用意したらもっと良い言語になると思いました。

あと、json.orgの情報量が凄いので要ブックマーク!

関連する記事

タグ: , , , , ,

add to hatena hatena.comment (0) add to del.icio.us (2) add to livedoor.clip (0) add to Yahoo!Bookmark (0) Total: 2

コメントをどうぞ