簡介:
JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。
它基於JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一個子集。
JSON采用完全獨立於語言的文本格式,
但是也使用了類似於C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。
這些特性使JSON成為理想的數據交換語言。易於人閱讀和編寫,同時也易於機器解析和生成。
JSON建構有兩種結構:
json簡單說就是javascript中的對象和數組,
所以這兩種結構就是對象和數組2種結構,通過這兩種結構可以表示各種復雜的結構
1、對象:對象在js中表示為“{}”擴起來的內容,
數據結構為 {key:value,key:value,...}的鍵值對的結構,
在面向對象的語言中,key為對象的屬性,value為對應的屬性值,所以很容易理解,
取值方法為 對象.key 獲取屬性值,這個屬性值的類型可以是 數字、字符串、數組、對象幾種。
2、數組:數組在js中是中括號“[]”擴起來的內容,
數據結構為 ["java","javascript","vb",...],
取值方式和所有語言中一樣,使用索引獲取,字段值的類型可以是 數字、字符串、數組、對象幾種。
經過對象、數組2種結構就可以組合成復雜的數據結構了。
解析方法:
JSON文檔的解析可以使用Perl的JOSN模塊,能很方便解析出各種結構和組合中的數據
實例:
#!/usr/bin/perl
use Encode;
use JSON;
use Data::Dumper;
my $json = new JSON;
#或以轉換字符集 my $json = JSON->new->utf8;
my $json_obj;
if(open(MYFILE, "FILE_PATH/json.html"))
{
print "讀取json數據成功。\n";
while(<MYFILE>)
{
$json_obj = $json->decode("$_");
#見下面的解析方法
}
}else{
print "讀取json數據失敗。\n";
}
1. 對象
"title":"都市女孩"
代碼:
my $title = $json_obj->{'title'};
2. 對象組合
"images":{"small":"http:\/\/img3.douban.com\/spic\/s8968115.jpg",
"large":"http:\/\/img3.douban.com\/lpic\/s8968115.jpg",
"medium":"http:\/\/img3.douban.com\/mpic\/s8968115.jpg"
}
代碼:
my $imgurl = $json_obj->{'images'}->{'large'};
3. 數組
"countries":["美國"],
"aka":["女孩我最大(台)","衰姐們"]}
代碼:
my $aka = "";
for my $item(@{$json_obj->{'aka'}})
{
$aka .= $item.",";
}
4. 對象與數組的組合
"casts":[
{"avatars":{"small":"http:\/\/img3.douban.com\/img\/celebrity\/small\/21417.jpg",
"large":"http:\/\/img3.douban.com\/img\/celebrity\/large\/21417.jpg",
"medium":"http:\/\/img3.douban.com\/img\/celebrity\/medium\/21417.jpg"
},
"alt":"http:\/\/movie.douban.com\/celebrity\/1011562\/",
"id":"1011562",
"name":"劉濤"
},
{"avatars":{"small":"http:\/\/img3.douban.com\/img\/celebrity\/small\/34429.jpg",
"large":"http:\/\/img3.douban.com\/img\/celebrity\/large\/34429.jpg",
"medium":"http:\/\/img3.douban.com\/img\/celebrity\/medium\/34429.jpg"
},
"alt":"http:\/\/movie.douban.com\/celebrity\/1044611\/",
"id":"1044611",
"name":"保劍鋒"
},
{"avatars":{"small":"http:\/\/img3.douban.com\/img\/celebrity\/small\/33257.jpg",
"large":"http:\/\/img3.douban.com\/img\/celebrity\/large\/33257.jpg",
"medium":"http:\/\/img3.douban.com\/img\/celebrity\/medium\/33257.jpg"
},
"alt":"http:\/\/movie.douban.com\/celebrity\/1315704\/",
"id":"1315704",
"name":"謝祖武"
},
{"avatars":null,
"alt":null,
"id":null,
"name":"喬大韋"
}
]
for my $item(@{$json_obj->{'casts'}})
{
$cast .= $item->{'name'}.",";
}