Perl解析JSON数据精解
简介:
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'}.",";
}
Perl解析JSON数据精解的更多相关文章
- JavaScript如何处理解析JSON数据详解
JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧. JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON ...
- Java构造和解析Json数据的两种方法详解二
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Jso ...
- Java构造和解析Json数据的两种方法详解二——org.json
转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/24/3096437.html 在www.json.org上公布了很多JAVA下的jso ...
- Java构造和解析Json数据的两种方法详解一——json-lib
转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/23/3096001.html 在www.json.org上公布了很多JAVA下的jso ...
- Java构造和解析Json数据的两种方法详解一
一.介绍 JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转换的包,主要就是用来解析Json数据,在其官网http://www.js ...
- Google Gson解析Json数据应用实例
转自:http://lixigao449778967.blog.163.com/blog/static/24985164201269105928783/ 1.需要的Jar包 1) Google Gso ...
- (转)springMVC框架下JQuery传递并解析Json数据
springMVC框架下JQuery传递并解析Json数据 json作为一种轻量级的数据交换格式,在前后台数据交换中占据着非常重要的地位.Json的语法非常简单,采用的是键值对表示形式.JSON 可以 ...
- Introduction to Structured Data json的2种形式 JAVA解析JSON数据 - JsonArray JsonObject
https://developers.google.com/search/docs/guides/intro-structured-data Structured data refers to kin ...
- 教你不编程快速解析 JSON 数据
JSON 是一种轻量级的,不受语言约束的数据存储格式,大部分编程语言都可以解析它,并且对编程人员也十分友好.我们在进行通讯/数据交互时,非常经常用到 JSON 格式. 但是,我们在进行数据存储的时候, ...
随机推荐
- hdu 5012 bfs 康托展开
Dice Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submi ...
- R语言入门--画图(一)--需要注意的地方
一.注意‘\t’是‘\t’ 不是‘/t’ 写'/t'就错了 就不是换行符了 二.程序报错先检查有没有这个包
- SLAVEOF以后
当我们想要某个Redis服务器复制另一个服务器时,我们可以在连接这个Redis服务器的客户端上输入“SLAVEOF”命令指定另一个服务器的IP地址和端口号: SLAVEOF <master_ip ...
- 动态AdvStringGrid完美示例 (AdvStringGrid使用技巧/Cells)
http://www.cnblogs.com/JackSun/archive/2010/12/16/1908104.html 此窗体,只需要简单准备如下,即可运行: 1,添加一个TAdvStri ...
- Spring Boot 2 快速教程:WebFlux 集成 Mongodb(四)
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 这是泥瓦匠的第104篇原创 文章工程:* JDK 1.8* M ...
- webstorm(二):拼写warning
逼死强迫症之对拼写进行检查,警告 typo:in word “msgfromfather”
- 洛谷——P3576 [POI2014]MRO-Ant colony
P3576 [POI2014]MRO-Ant colony 题目描述 The ants are scavenging an abandoned ant hill in search of food. ...
- 使用git 高效多人合作
复习一下... 附加学习链接: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/) ...
- Go -- 漫谈IM通信架构
前前后后做的IM和推送系统已经有好几个了,一直都想好好总结下,因此就有了这篇文章.在我刚学编程的那会儿,觉得网络通信是一个很牛逼和门槛很高的一门技术,但是随着开源技术的发展和互联网知识的共享,现在要写 ...
- Linux下Tomcat VM參数改动
不可行的方法 最初我直接改动catalina.sh, 将JAVA_OPTS变量加上了 -server -Xms1G -Xmx1G -XX:+UserG1GC 最初看起来没啥问题,可是当服务器运行几天后 ...