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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/216250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

个人介绍以及毕业去向

CSDN陪伴我从大一到大四&#xff0c;后面也会接着用 写一点大学四年的总结 #总结#理工科#留学 211大学 弃保出国 智能科学与技术 均分88.9 EI论文一篇 数学竞赛和数学建模均为省二 大创评为国家级 全国大学生计算机设计大赛国家三等奖 百度Paddle、大疆RoboMaster、Phytium Te…

2 mysql主从复制配置

1、节点以及网络配置 前置条件&#xff1a; 已经在linux上安装好了一主一从或者一主多从的mysql 2、具体配置 主服务器 172.20.0.2 从服务器 172.20.0.3 首先主机mysql配置&#xff1a; 打开mysqld.cnf&#xff1a; 添加如下配置&#xff1a; # 主服务器ID 必须唯一 serve…

硕士论文写的重复率 PaperBERT

大家好&#xff0c;今天来聊聊硕士论文写的重复率&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff1a; 硕士论文写的重复率 1. 硕士论文的重要性 硕士论文是硕士阶段最重要的学术成果之一&#xff0c;它不仅…

力扣面试150题 | 209.长度最小的子数组

力扣面试150题 &#xff5c; 209.长度最小的子数组 题目描述解题思路代码实现 题目描述 209.长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, …, numsr-1, numsr] …

基于ssm四六级报名与成绩查询系统论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对四六级报名信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性…

UE4 图片环形轮播 蓝图

【需求】 图片环形轮播 任意图片之间相互切换 切换图片所需时间均为1s 两个图片之间切换使用就近原则 播放丝滑无闪跳 【Actor的组成】 每个图片的轴心都在原点 【蓝图节点】

记录 | linux安装Manim

linux 安装 Manim sudo apt update sudo apt install build-essential python3-dev libcairo2-dev libpango1.0-dev ffmpeg sudo apt install xdg-utilsconda create manim_py39 python3.9 conda activate manim_py39pip install manim安装好环境后来测试一个例程&#xff0c;…

ECS省钱指南来啦!万字长文教你如何选择与业务形态最匹配的付费方式

为了更好的帮助用户在使用DevOps缩短开发周期、提升业务效率的同时&#xff0c;也能让业务保持稳定、安全、可靠&#xff0c;且低成本的持续运营&#xff0c;阿里云弹性计算团队独家出品的【弹性计算技术公开课_CloudOps云上运维季】正式启动。阿里云弹性计算内部13位产品&…

css去掉input,textarea默认样式,自定义样式

1.HTML <section><div class"text">姓名</div><input type"text" placeholder"请输入姓名" class"input"></section> <section><div class"text">详情</div><textarea…

接口测试 — 1.接口和接口文档概念

1、接口的概念 接口又叫API&#xff0c;全称application programming interface&#xff1a;应用程序接口&#xff08;规范&#xff09;&#xff0c;也就是我们经常会听说Web接口&#xff0c;APP接口。 详细说明&#xff1a; APP是一种基于C/S架构的应用程序&#xff0c;如抖音…

服务熔断的服务降级的本质区别

服务熔断&#xff08;Circuit Breaking&#xff09;和服务降级&#xff08;Service Degradation&#xff09;是两种常用于分布式系统和微服务架构中的容错技术&#xff0c;尽管它们的目的都是保持系统的稳定性和可用性&#xff0c;但它们的本质区别在于它们的应用场景和处理方式…

MYSQL练题笔记-子查询-电影评分

一、题目相关内容 1&#xff09;相关的表 2&#xff09;题目 3&#xff09;帮助理解题目的示例&#xff0c;提供返回结果的格式 二、自己初步的理解 1.字典序是指从前到后比较两个字符串大小的方法。 首先比较第1个字符&#xff0c;如果不同则第1个字符较小的字符串更小&…

Retrofit嵌套请求与适配器

一、前言&#xff1a; 1. retrofit嵌套请求 在实际开发中&#xff0c;可能会存在&#xff1a;需要先请求A接口&#xff0c;在请求B接口的情况&#xff0c;比如进入“玩android”网页请求获取收藏文章列表&#xff0c;但是需要先登录拿到Cookie才能请求搜藏文章几口&am…

day01、什么是数据库系统?

数据库系统介绍 1.实例化与抽象化数据库系统2.从用户角度看数据库管理系统的功能2.1 数据库定义功能2.2 数据库操纵2.3 数据库控制2.4 数据库维护功能2.5 数据库语言与高级语言 3.从系统&#xff1a;数据库管理系统应具有什么功能 来源于战德臣的B站网课 1.实例化与抽象化数据库…

vue 导出el-table选择的数据使用笔记

1、安装 cnpm i vue-json-excel --save 2、使用 1、引入 import JsonExcel from vue-json-excel 2、注册 components: {downloadExcel:JsonExcel,}, 3、页面使用 data&#xff1a;{return {excelName:每日火化量统计${new Date().valueOf()}.xls,json_fields:{"类…

Node.js 事件循环简单介绍

1.简介 Node.js 事件循环是 Node.js 运行时环境中的一个核心机制&#xff0c;用于管理异步操作和回调函数的执行顺序。它基于事件驱动模型&#xff0c;通过事件循环来处理和派发事件&#xff0c;以及执行相应的回调函数。 Node.js 是单进程单线程应用程序&#xff0c;但是因为…

Windows编译动态库没有生成.lib文件问题

最近修改了一个项目&#xff0c;以前生成静态库&#xff0c;后改为生成动态库&#xff0c;在Linux上没有问题&#xff0c;但在Windows上只生成了.dll文件&#xff0c;没有生成.lib文件。 在Windows中&#xff0c;.lib文件除了可以用作静态链接库外&#xff0c;还有另一种用途&…

QT QIFW Windows下制作安装包(一)

一、概述 1、QIFW是一款基于QT框架开发的跨平台安装框架。QIFW是QT Installer FrameWork的缩写&#xff0c;支持Windows、Linux和macos等多种平台。QIFW可以帮助开发者创建自己的安装程序&#xff0c;将它们打包到通用的安装包中&#xff0c;并提供可视化的界面进行安装。 2…

Django分页器

1 Django的分页器&#xff08;paginator&#xff09;简介 在页面显示分页数据&#xff0c;需要用到Django分页器组件 from django.core.paginator import Paginator Paginator对象&#xff1a; paginator Paginator(user_list, 10) # per_page: 每页显示条目数量 # coun…

mysql:用SHOW CREATE TABLE tbl_name查看创建表的SQL语句

https://dev.mysql.com/doc/refman/8.2/en/show-create-table.html 可以用SHOW CREATE TABLE tbl_name查看创建表的SQL语句。 例如&#xff0c;SHOW CREATE TABLE test_table;表示查询创建test_table表的SQL语句&#xff1a;