perl处理json的序列化和反序列化
作者:爱读庄子的码农
perl可以使用JSON模块很方便的处理json的序列化和反序列化。先来一段简单的例子:
#! /usr/bin/perl use v5.14; use JSON; use IO::File; my $info = { id => 1024, desc => 'hello world', arry => [1, 2, 3, 4, 5], obj => { char => [ 'A', 'B', 'C' ] } }; say to_json($info, { pretty => 1 });
脚本执行后的输出结果:
to_json 就是序列化,把hash对象序列化为json字符串,如果有需要,可以直接把这个字符串写入文件。函数调用中有一个 pretty => 1 的使用,默认不传入这个参数或者 pretty => 0, 结果如下:
{"arry":[1,2,3,4,5],"desc":"hello world","id":1024,"obj":{"char":["A","B","C"]}}
json中如果要使用 true、false、null这些特殊值,可以如下使用,在之前的那个脚本中我们继续添加举例:
#! /usr/bin/perl use v5.14; use JSON; use IO::File; my $info = { id => 1024, desc => 'hello world', arry => [1, 2, 3, 4, 5], obj => { char => [ 'A', 'B', 'C' ] }, other_1 => { test_true => \1, test_false => \0, test_null => undef }, other_2 => { test_true => JSON::true, test_false => JSON::false, test_null => JSON::null } }; say to_json($info, { pretty => 1 });
输出结果如下:
{
"other_2" : {
"test_true" : true,
"test_null" : null,
"test_false" : false
},
"obj" : {
"char" : [
"A",
"B",
"C"
]
},
"arry" : [
1,
2,
3,
4,
5
],
"id" : 1024,
"other_1" : {
"test_false" : false,
"test_null" : null,
"test_true" : true
},
"desc" : "hello world"
}
在脚本中可以清楚的看到两种表示方法:
了解了JSON模块的序列化,下面来看反序列化的处理,为了说明简洁,这里直接把上面脚本的输出结果加在脚本中,使用perl的DATA句柄读取数据,脚本如下:
#! /usr/bin/perl use v5.14; use JSON; use IO::File; # 读取json字符串数据 my $json_str = join('', <DATA>); # 反序列化操作 my $json = from_json($json_str); say $json->{desc}; say '-' x 60; say $json->{other_1}{test_true}; say $json->{other_1}{test_false}; unless (defined $json->{other_1}{test_null}) { say '---------null'; } say '-' x 60; say for @{ $json->{arry} }; __DATA__ { "id" : 1024, "desc" : "hello world", "other_1" : { "test_null" : null, "test_false" : false, "test_true" : true }, "obj" : { "char" : [ "A", "B", "C" ] }, "other_2" : { "test_false" : false, "test_null" : null, "test_true" : true }, "arry" : [ 1, 2, 3, 4, 5 ] }
脚本读取json字符串数据后使用from_json反序列化得到一个hash引用,然后打印出部分字段的值,结果如下:
hello world
------------------------------------------------------------
1
0
---------null
------------------------------------------------------------
1
2
3
4
5
可以看到,输出值是正确的。其中true输出的是1,false输出的是0。
到此这篇关于perl处理json的序列化和反序列化的文章就介绍到这了,更多相关perl处理json内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!