Mojo::JSON 是一个纯Perl实现的简约的JSON解析器。
use
Mojo::JSON qw(decode_json encode_json);
my $bytes = encode_json { foo => [1, 2], bar => 'hello!' , baz => \1};
my $hash = decode_json $bytes ;
简介
Mojo::JSON 支持正常的Perl数据类型,如标量、数组引用、散列引用,对于已经blessed的或者其他无法正常解析的引用会尝试调用TO_JSON方法对他们进行字符串化。Perl中的字符串和数字的区分是非常困难的,这取决于它的使用方式。当一个标量有可能是字符串,也有可能是数字时,字符串具有较高的优先级。
[1, -2, 3] -> [1, -2, 3]
{"foo": "bar"} -> {foo => 'bar'}
一些常量名字会被Mojo::JSON常量或者本地类似的值转换。
true -> Mojo::JSON->true
false -> Mojo::JSON->false
null -> undef
象标量的引用, 如果他们的值是真或者假, 会被当成布尔型。
\1 -> true
\0 -> false
有二个 Unicode 的空白字符 u2028 和 u2029 总是会转义, 这样会让 JSONP 更加容易, 还有会有字符 / , 以防 xss 攻击.
"\x{2028}\x{2029}</script>" -> "\u2028\u2029<\/script>"
函数
Mojo::JSON 中实现了以下函数,可以单独导入。
decode_json
my $value = decode_json $bytes;
将JSON解码为Perl值,如果解码失败,则会退出程序。
encode_json
my $bytes = encode_json {i => '♥ mojolicious'};
将Perl值编码为JSON。
false
my $false = false;
因为Perl没有原生值来表示false,所以使用虚拟实现。
true
my $true = true;
因为Perl没有原生值来表示true,所以使用虚拟实现。
from_json
my $value = from_json $chars;
解码未使用UTF-8编码的JSON文本,生成Perl值。如果解码失败,则会退出程序。
to_json
my $chars = to_json {i => '♥ mojolicious'};
将Perl值编码为JSON文本而不进行UTF-8编码。
j
my $bytes = j [1, 2, 3];
my $bytes = j {i => '♥ mojolicious'};
my $value = j $bytes;
编码Perl数据结构(可能只是数组引用或散列引用)或解码JSON。如果返回undef表示解析失败或是遇到了null值。
网友评论