JSON - JSON (JavaScript Object Notation) encoder/decoder  

简介:

 use JSON; # imports encode_json, decode_json, to_json and from_json.

 # simple and fast interfaces (expect/generate UTF-8)

 $utf8_encoded_json_text = encode_json $perl_hash_or_arrayref;
$perl_hash_or_arrayref = decode_json $utf8_encoded_json_text; # OO-interface $json = JSON->new->allow_nonref; $json_text = $json->encode( $perl_scalar );
$perl_scalar = $json->decode( $json_text ); $pretty_printed = $json->pretty->encode( $perl_scalar ); # pretty-printing # If you want to use PP only support features, call with '-support_by_pp'
# When XS unsupported feature is enable, using PP (de|en)code instead of XS ones. use JSON -support_by_pp; # option-acceptable interfaces (expect/generate UNICODE by default) $json_text = to_json( $perl_scalar, { ascii => 1, pretty => 1 } );
$perl_scalar = from_json( $json_text, { utf8 => 1 } ); # Between (en|de)code_json and (to|from)_json, if you want to write
# a code which communicates to an outer world (encoded in UTF-8),
# recommend to use (en|de)code_json. 这个版本 是兼容JSON::XS 2.34 和以后版本 注意: JSON::PP 是很早包含在JSON发布版本, 在Perl 5.14 变成一个核心模块。 对于这个会话,JSON::PP 是从JSON 发布版本中移除, 现在可以在Perl5的库中发现 JSON 是一个简单的数据类型: 这个模块转换Perl的数据结构到JSON JSON::XS 是最快的和最适当的JSON模块在CPAN ,必须被编译和安装在你的环境 JSON::PP 是一个纯-Perl的模块 区分 模块名'JSON'和格式JSON, 前者是引号通过C<>(它的结果变化和你使用的介质), Module name : JSON Format type : JSON FEATURES 1.正确处理unicode 2. 这个模块(即后端模块) 知道如何处理Unicode,如何和何时做, 甚至记录正确意味着什么 尽管有局限性,这个功能是可用的在Perl 5.6以后 JSON::XS 需要Perl 5.8.2(但是正确工作在5.8.8或者以后版本), 因此在老的版本JSON 应该调用JSON::PP 作为后台 3. 往返的完整性: 当你持续一个perl 数据结果只使用被JSON和PERL支持的数据类型, 描述的数据类型结构是相同的在Perl层面。 JSON 的严格检查的正确性 没有猜测,没有产生非法的JSON 文本, 只有JSON 是被接收作为输入 fast 模块返回一个 JSON::XS 对象本身。相比其他的JSON模块和其他的serialisers 比如存储, simple to use 使用简单 该模块即有一个简单的函数接口以及一个面向对象的接口 合理通用输出格式 你可以选择在最紧凑的单行格式可能的选择(很好的对于简单行基于协议), 一个纯ASCII 格式(对于当你的传输不是9位的,仍旧支持整个Unicode 范围0 函数接口: 一些文件被辅助,从函数接口修改 encode_json $json_text = encode_json $perl_scalar 转换给定的perl 数据结构到一个UTF-8编码的,2进制字符串 decode_json $perl_scalar = decode_json $json_text 和encode_json 相反,期望是一个UTF-8(binary) 字符串和尝试解析一个UTF-8编码的JSON文本, 返回一个结果引用 如何从外部解码数据和编码数据到外部 这个章节假设你的Perl版本是5.8或者更高 如果你知道一个JSON文本从外部世界 -a 网络,一个文件格式等等, 是被编码成UTF-8,,你需要使用decode_json 或者JSON模块对象在启用UTF8的情况下。 解码结果会包含UNICODE 字符串 # from network
my $json = JSON->new->utf8;
my $json_text = CGI->new->param( 'json_data' );
my $perl_scalar = $json->decode( $json_text ); # from file content
local $/;
open( my $fh, '<', 'json.data' );
$json_text = <$fh>;
$perl_scalar = decode_json( $json_text ); 如果外部数据不是UTF-8编码的,首先你必须decode 它的结果变化和你使用的介质
use Encode;
local $/;
open( my $fh, '<', 'json.data' );
my $encoding = 'cp932';
my $unicode_json_text = decode( $encoding, <$fh> ); # UNICODE # or you can write the below code.
#
# open( my $fh, "<:encoding($encoding)", 'json.data' );
# $unicode_json_text = <$fh>; 在这种情况下, $unicode_json_text 当然是UNICODE string. 因此你不需要使用 decode_json nor JSON module object 启用utf8. 现在, 你需要转换你的$perl_scalar 为JSON 数据和发送它到一个外部世界 -a 网络 或者文件内容 你的数据通常包含UNICODE 字符串和你需要转换数据为UTF-8编码的, 如果 $perl_scalar不包含UNICODE 但是$encoding-encoded字符串由于某些原因, 然后它的字符串是被对待为latin1 在perl里(因为它不关心你的$encoding). 你不能使用 encode_json nor JSON 模块对象在UTF8启用的情况下。

perl json模块的更多相关文章

  1. perl JSON模块使用

    简介: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 它基于JavaScript(Standard ECMA-262 3rd Edition - De ...

  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. poj 1850/poj 1496

    http://poj.org/problem?id=1850 -----------------http://poj.org/problem?id=1496 两题解法类似..本题为组合数学的题,要求所 ...

  2. HDFS写入和读取流程

    HDFS写入和读取流程 一.HDFS HDFS全称是Hadoop Distributed System.HDFS是为以流的方式存取大文件而设计的.适用于几百MB,GB以及TB,并写一次读多次的场合.而 ...

  3. cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap(三)-按键处理

    在地图初始化好了之后,就开始移动马里奥吧,我在windows下,是使用键盘来移动马里奥的 w是跳,d是前进,a是后退,那么在程序里是怎么来获取这个按键的呢? 普通的windows程序,在按键之后,会有 ...

  4. 十:Java之泛型

    [定义] 一.泛型的定义主要有下面两种: 在程序编码中一些包括类型參数的类型,也就是说泛型的參数仅仅能够代表类.不能代表个别对象.(这是当今较常见的定义) 在程序编码中一些包括參数的类.其參数能够代表 ...

  5. LeetCode——Path Sum II

    Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...

  6. AFNetworking 3.0x版本最新特性

    AFNetworking是一款在OS X和iOS下都令人喜爱的网络库.为了迎合iOS新版本的升级, AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持. ...

  7. STM32使用串口1配合DMA接收不定长数据,减轻CPU载荷

    STM32使用串口1配合DMA接收不定长数据,减轻CPU载荷 http://www.openedv.com/thread-63849-1-1.html 实现思路:采 用STM32F103的串口1,并配 ...

  8. c++ 虚析构函数[避免内存泄漏]

    c++  虚析构函数: 虚析构函数(1)虚析构函数即:定义声明析构函数前加virtual 修饰, 如果将基类的析构函数声明为虚析构函数时,由该基类所派生的所有派生类的析构函数也都自动成为虚析构函数. ...

  9. ubuntu15.04安装hexo

    首先吐槽一下npm淘宝源,貌似中国目前唯一一个npm源,现在不好用了,不知道是不是换了地址,在吐槽一下万恶的墙!你懂得. 好了,说点正儿八经的事儿. 之所以安装hexo也是为了创建自己的博客,我只说最 ...

  10. oracle11g dataguard 完全手册(转)

    转自:http://www.cnblogs.com/tippoint/archive/2013/04/18/3029019.html 一.前言:   网络上关于dataguard的配置文章很多,但是很 ...