简介:

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模块使用的更多相关文章

  1. perl json模块

    JSON - JSON (JavaScript Object Notation) encoder/decoder 简介: use JSON; # imports encode_json, decode ...

  2. 洗礼灵魂,修炼python(70)--爬虫篇—补充知识:json模块

    在前面的某一篇中,说完了pickle,但我相信好多朋友都不懂到底有什么用,那么到了爬虫篇,它就大有用处了,而和pickle很相似的就是JSON模块 JSON 1.简介 1)JSON(JavaScrip ...

  3. python学习笔记(四)random 、json模块

    一.模块简介 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 导入模块 import module #导入模块 f ...

  4. python json模块(15)

    JSON 的全称是 JavaScript Object Notation,即 JavaScript 对象符号,它是一种轻量级.跨平台.跨语言的数据交换格式,其设计意图是把所有事情都用设计的字符串来表示 ...

  5. python的json模块

    Python JSON 本章节我们将为大家介绍如何使用 Python 语言来编码和解码 JSON 对象. 环境配置 在使用 Python 编码或解码 JSON 数据前,我们需要先安装 JSON 模块. ...

  6. php安装json模块

    centOS上因为看php源码中没有json模块,于是采用pecl自动编译安装:# yum install php-devel# yum install php-pear# yum install g ...

  7. 解决python中json模块loads出来的结构都是unicode的问题

    在使用python的json模块对json字串反序列化成python对象的时候出现的字符串都是unicode类型,而不是python内置的str类型.在某种使用场景下用户必须做显式的转换才能正常使用, ...

  8. 全局变量 urllib模块 json模块

    1.vars()  查看一个.py文件中的全局变量 print(vars()) #重点 __name__': '__main__ '__file__': 'C:/Users/lenovo/Pychar ...

  9. 我为什么要再给lua写一个json模块

    最近要给自己编写的服务器加上json解析模块.根据我当前的项目,可以预测服务器中使用json的地方: 通信.由于与客户端通信使用google protocolbuffer,仅在与SDK通信中使用jso ...

随机推荐

  1. ASP.NET使用MergeInto做数据同步,同步SQLSERVER不同数据库的相同表结构的数据

    public string SynchronousData() { ReturnJson Rejson = new ReturnJson(); //将WebConfig中的数据库连接name中的值写进 ...

  2. c#.net 获取时间日期年月日时分秒生成自动文件名格式

    下面是日期和时间的各种方法,转换为字符串. 如果把输出的格式改下就可以做类似的文件名了,例如:2016010110101224356.doc  c#用DateTime.Now.ToString(&qu ...

  3. 算法38---292. Nim游戏

    1.题目: 你和你的朋友,两个人一起玩 Nim游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头. 拿掉最后一块石头的人就是获胜者.你作为先手. 你们是聪明人,每一步都是最优解. 编写一个函 ...

  4. Vue 基础篇

    Vue 基础篇 一.框架与库的区别 JQ库->DOM(DOM操作) + Ajax请求 art-template库->模板引擎 框架 -> 全方位.功能齐全 简易的DOM体验 + 发请 ...

  5. tinymce原装插件源码分析(一)-hr

    tinymce简介 tinymce是一款能方便无限扩展的网页富文本编辑器. tinymce原装插件已经十分丰富,对于文本编辑(blog等文章)是绰绰有余,但是应对一些复杂的应用,比如在上面开发html ...

  6. javascript的var声明变量和不用var声明变量在全局作用域的区别;

    在全局作用域下,使用var定义的变量不可以delete,没有var 定义的变量可以delete.也就说明隐含全局变量严格来说不是真正的变量,而是全局对象的属性,因为属性可以通过delete删除,而变量 ...

  7. Java Class文件结构

    此文件格式为JAVA7的格式,可能与JAVA6 CLASS不一致. 每一个Class都对应着唯一的一个类或借口的定义信息.这里,我们称为"Class文件格式"只是通俗的将任意一个符 ...

  8. 微信小程序 上传图片

    效果图  如上,js  如下,在页面循环图片就可以 /** * 选择图片 */ uploadImgAdd: function(e) { var imgs = this.data.imgs; wx.ch ...

  9. 通过唯一ID实现简单的日志跟踪实现

    在实际项目中,通知我们需要记录一些日志,方便问题核查.但是日志多了就很容易混乱,请求,响应,执行中的日志无法对应,这时就需要为请求进行标记唯一ID来进行跟踪. /** * 记录请求日志 * * Cla ...

  10. Vue2.0父子组件间事件派发机制

    从vue1.x过来的都知道,在vue2.0中,父子组件间事件通信的$dispatch和$broadcase被移除了.官方考虑是基于组件树结构的事件流方式实在是让人难以理解,并且在组件结构扩展的过程中会 ...