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。

相关推荐

  1. c# Newtonsoft.Json 序列序列

    2023-12-12 23:32:01       34 阅读
  2. C# Bin、XML、Json序列序列

    2023-12-12 23:32:01       36 阅读
  3. Json 序列错误

    2023-12-12 23:32:01       7 阅读
  4. Flutter-如何序列序列化为json对象

    2023-12-12 23:32:01       16 阅读
  5. Unity-序列序列

    2023-12-12 23:32:01       43 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-12 23:32:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-12 23:32:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-12 23:32:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-12 23:32:01       20 阅读

热门阅读

  1. 如何在Git中忽略DS_Store文件

    2023-12-12 23:32:01       35 阅读
  2. 代码随想录 416. 分割等和子集

    2023-12-12 23:32:01       36 阅读
  3. typescript中常用object方法?

    2023-12-12 23:32:01       36 阅读
  4. 跨站脚本攻击(xss)

    2023-12-12 23:32:01       40 阅读
  5. Python迭代器与生成器研究记录

    2023-12-12 23:32:01       34 阅读
  6. Optional

    2023-12-12 23:32:01       38 阅读
  7. IT运维产业在大数据驱动变革下的应用建议

    2023-12-12 23:32:01       42 阅读