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()
{
$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'}.",";
}
注意:json解析异常需要捕获。
原文:http://blog.chinaunix.net/uid-26000296-id-3508036.html
perl JSON模块使用的更多相关文章
- perl json模块
JSON - JSON (JavaScript Object Notation) encoder/decoder 简介: use JSON; # imports encode_json, decode ...
- 洗礼灵魂,修炼python(70)--爬虫篇—补充知识:json模块
在前面的某一篇中,说完了pickle,但我相信好多朋友都不懂到底有什么用,那么到了爬虫篇,它就大有用处了,而和pickle很相似的就是JSON模块 JSON 1.简介 1)JSON(JavaScrip ...
- python学习笔记(四)random 、json模块
一.模块简介 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 导入模块 import module #导入模块 f ...
- python json模块(15)
JSON 的全称是 JavaScript Object Notation,即 JavaScript 对象符号,它是一种轻量级.跨平台.跨语言的数据交换格式,其设计意图是把所有事情都用设计的字符串来表示 ...
- python的json模块
Python JSON 本章节我们将为大家介绍如何使用 Python 语言来编码和解码 JSON 对象. 环境配置 在使用 Python 编码或解码 JSON 数据前,我们需要先安装 JSON 模块. ...
- php安装json模块
centOS上因为看php源码中没有json模块,于是采用pecl自动编译安装:# yum install php-devel# yum install php-pear# yum install g ...
- 解决python中json模块loads出来的结构都是unicode的问题
在使用python的json模块对json字串反序列化成python对象的时候出现的字符串都是unicode类型,而不是python内置的str类型.在某种使用场景下用户必须做显式的转换才能正常使用, ...
- 全局变量 urllib模块 json模块
1.vars() 查看一个.py文件中的全局变量 print(vars()) #重点 __name__': '__main__ '__file__': 'C:/Users/lenovo/Pychar ...
- 我为什么要再给lua写一个json模块
最近要给自己编写的服务器加上json解析模块.根据我当前的项目,可以预测服务器中使用json的地方: 通信.由于与客户端通信使用google protocolbuffer,仅在与SDK通信中使用jso ...
随机推荐
- CSS3的常用属性(二)
边框 边框圆角 border-radius: 100px 每个角可以设置两个值,x和y 补充: 可分别设置长,短半径,以“/”进行分隔,遵循顺时针的顺序,“/”之前为横轴半径,“/”之后为纵轴半径,如 ...
- Android 广播大全 Intent Action 事件详解
Android 广播大全 Intent Action 事件详解 投稿:mrr 字体:[增加 减小] 类型:转载 时间:2015-10-20我要评论 这篇文章主要给大家介绍Android 广播大全 In ...
- RGB颜色值与十六进制颜色码转换工具
RGB颜色值转换成十六进制颜色码: 十六进制颜色码转换成RGB颜色值: 颜色码对照表 颜色 英文代码 形象描述 十六进制 RGB LightPink 浅粉红 #FFB6C1 255, ...
- 【原创】Apache和Tomcat实现动静分离
集群中每个节点都启用了页面静态化功能,所以,为了防止单个节点刷新造成找不到页面问题,将每个节点刷新的页面都放入apache虚拟目录下,由apache统一来处理.静态页面由apache处理,动态页面仍然 ...
- 《剑指offer》二叉搜索树与双向链表
一.题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向 二.输入描述 输入一棵二叉搜索树 三.输出描述 将该二叉搜索树转换成一个 ...
- 读 Real-Time Rendering 收获 - chapter 6. texturing
Texturing, at its simplest, is a techinique for efficiently modeling the surface's properties.
- pthread_cleanup_push vs Autorelease VS 异常处理
黑幕背后的Autorelease http://www.cnblogs.com/feng9exe/p/7239552.html objc_autoreleasePoolPush的返回值正是这个哨兵对象 ...
- PKI和加密,散列算法
Day 11-PKI和加密,散列算法 PKI(Public Key Infrastructure公钥基础设施) 1 PKI(Public Key Infrastructure公钥基础设施)回顾学习 - ...
- Visual Studio中C++工程的环境配置方法
在Visual Studio的C++工程设置 1.添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录. 2.添加文件引用的lib静态库路径:工程---属性- ...
- String值传递剖析
转载自 http://www.iteye.com/topic/412531 提要:本文从实现原理的角度上阐述和剖析了:在Java语言中,以String作为类型的变量在作为方法参数时所表现出的“非对象” ...