perl处理json的序列化和反序列化

perl处理json的序列化和反序列化

perl可以使用JSON模块很方便的处理json的序列化和反序列化。先来一段简单的例子:

#! /usr/bin/perluse 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/perluse 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/perluse 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的序列化和反序列化