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. 谷歌三大核心技术(二)Google MapReduce中文版

    谷歌三大核心技术(二)Google MapReduce中文版  Google MapReduce中文版     译者: alex   摘要 MapReduce是一个编程模型,也是一个处理和生成超大数据 ...

  2. kinect for windows - DepthBasics-D2D详解之二

    通过上篇文章,我们了解了在视频图像从kinect开发包传输到应用程序之前的一系列初始化工作,那么这篇文章主要来叙述,如何将一帧图像数据获取到,并显示出来的. 更新窗口是在Run函数消息处理中,当Kin ...

  3. django在视图中使用模板

    在视图中使用模板   在学习了模板系统的基础之后,现在让我们使用相关知识来创建视图. 重新打开我们在前一章在 mysite.views 中创建的 current_datetime 视图. 以下是其内容 ...

  4. 配置greenplum参数

    在进行一个greenplum安装之前需要进行配置一下相关的系统参数,否则很容易出现意想不到的错误. 1.修改系统参数 编辑 /etc/sysctl.conf ,以下是最小配置 kernel.shmma ...

  5. main函数的参数问题 (转载)

    void main(int arg ,char *arv[]){} arg -- 命令行参数总个数arv[0] -- 参数1,程序名 arv[1] -- 参数2,字符串 arv[2] -- 参数3,字 ...

  6. 那些年搞不懂的"协变"和"逆变"

    博主之前也不是很清楚协变与逆变,今天在书上看到了有关于协变还是逆变的介绍感觉还是不太懂,后来看了一篇园子里面一位朋友的文章,顿时茅塞顿开.本文里面会有自己的一些见解也会引用博友的一些正文,希望通过本篇 ...

  7. Delphi资源大全

    A curated list of awesome Delphi frameworks, libraries, resources, and shiny things. Inspired by awe ...

  8. VC++共享数据段实现进程之间共享数据

    当我写了一个程序,我希望当这个程序同时运行两遍的时候,两个进程之间能共享一些全局变量,怎么办呢?很简单,使用VC\VC++的共享数据段.; #pragma data_seg()//恢复到正常段继续编程 ...

  9. redis(三)redis+Keepalived主从热备秒级切换

    一 简介 安装使用centos 5.10 Master 192.168.235.135 Slave 192.168.235.152 Vip 192.168.235.200 编译环境 yum -y in ...

  10. Bugzilla使用手册及解决方案

    Bugzilla使用手册 Bugzilla 是一个开源的缺陷跟踪系统(Bug-Tracking System),它可以管理软件开发中缺陷的提交(new),修复(resolve),关闭(close)等整 ...