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 ...
随机推荐
- OC冒泡排序算法
面试的时候很多公司会要求写一个冒泡排序算法,于是用OC写了一个,代码如下所示 需要注意的事项:oc数组只能存放oc对象,因此遍历数组输出的时候,记得通过NSString对象转换成intValue #i ...
- POJ 3178 凸包+DP (巨坑)
题意: 思路: 这题巨坑!!! 这题巨坑!!! 这题巨坑!!! 这题巨坑!!! 这题巨坑!!! (而且没有题解--.5555555--) 只能照着自己想的写了-- 先求出来凸包 求凸包的方法呢:先找出 ...
- 线上服务CPU100%问题快速定位实战--转
来自微信公众号 架构师之路 功能问题,通过日志,单步调试相对比较好定位. 性能问题,例如线上服务器CPU100%,如何找到相关服务,如何定位问题代码,更考验技术人的功底. 58到家架构部,运维部,58 ...
- SQL Server查询数据库空间分配情况、数据库备份信息
查询数据库空间分配情况: use master go create procedure dbo.proc_getdbspaceused as begin set nocount on create t ...
- 如何在Windows下安装Linux子系统(Ubuntu,openSUSU,SUSU Linux Server)
注意:只有win10才能安装,安装的linux没有图形界面. 1.首先在win10设置 --> 更新与安装 --> 针对开发人员 ,选择开发人员模式. 2.win10 Cortana -- ...
- solarwinds之数据库
1. Orion配置向导 2. 连接数据库 3. 创建一个新的数据库 4. ...
- POJ 1273 Drainage Ditches【最大流】
题意:给出起点是一个池塘,M条沟渠,给出这M条沟渠的最大流量,再给出终点是一条河流,问从起点通过沟渠最多能够排多少水到河流里面去 看的紫书的最大流,还不是很理解,照着敲了一遍 #include< ...
- python中index、slice与slice assignment用法
python中index.slice与slice assignment用法 一.index与slice的定义: index用于枚举list中的元素(Indexes enumerate the elem ...
- CDR X6三折促销活动,可入
继CDR X6双十二限量活动之后,CorelDRAW官方为庆祝2018新年新气象,折扣狂潮,又来一波.上次活动由于时间短,任务急,数量少,使得不少小伙伴抱憾而止,选择默默等待良机.现在,良机来了,即便 ...
- java 实现多线程 3种方式
java实现多线程可以有以下三种方式: (1)继承Thread 类,重写其run()方法: (2)实现Runnable接口,实现其run() 方法: (3) 实现Callable 接口,重写call( ...