Perl中JSON的解析和utf-8乱码的解决

简介:

最近在做一个带有网络通讯和同步功能的app,需要自己写一些后台的东西。因为是半路入门,所以从事开发以来就没有做过后台相关的工作,属于绝对的小白菜鸟。而因为公司在入职前给新员工提过学习Perl的要求,所以还算是稍微看过一些。这次的后台也直接就用Perl来写了。

基本使用

和app的通讯,很大程度上依赖了JSON,一来是熟悉,二来是iOS现在解析JSON也十分方便。iOS客户端的话JSON的解析和生成都是没什么问题的:iOS5中加入了NSJSONSerialization类来提供相关功能,如果希望支持更早的系统版本的话,相关的开源代码也有很多,也简单易用,比如SBJson或者JSONKit。同样,在Perl里也有不少类似的JSON处理的模块,最有名最早的应该是JSON模块了,同时也简单易用,应该可以满足大部分情况下的需求了。

使用也很简单,安装完模块后,use之后使用encode_json命令即可将perl的array或者dic转换为标准的JSON字符串了:

use JSON qw/encode_json decode_json/;
my $data = [
    {
        'name' => 'Ken',
        'age' => 19
    },
    {
        'name' => 'Ken',
        'age' => 25
    }
];
my $json_out = encode_json($data);

得到的字符串为

[{"name":"Ken","age":19},{"name":"Ken","age":25}]

相对应地,解析也很容易

my $array = decode_json($json_out);

得到的$array是含有两个字典的数组的ref。

UTF-8乱码解决

在数据中含有UTF-8字符的时候需要稍微注意,如果直接按照上面的方法将会出现乱码。JSON模块的encode_json和decode_json自身是支持UTF8编码的,但是perl为了简洁高效,默认是认为程序是非UTF8的,因此在程序开头处需要申明需要UTF8支持。另外,如果需要用到JSON编码的功能(即encode_json)的话,还需要加入Encode模块的支持。总之,在程序开始处加入以下:

use utf8;
use Encode;

另外,如果使用非UTF8进行编码的内容的话,最好先使用Encode的from_to命令转换成UTF8,之后再进行JSON编码。比如使用GBK编码的简体字(一般来自比较早的Windows的文件等会偶尔变成非UTF8编码),先进性如下转换:

use JSON;
use Encode 'from_to';

# 假设$json是GBK编码的
my $json = '{"test" : "我是GBK编码的哦"}';

from_to($json, 'GBK', 'UTF-8');

my $data = decode_json($json);

其他的,如果追求更高的JSON转换性能的话,可以试试看JSON::XS之类的附加模块~




转载自:https://onevcat.com/

相关文章
|
29天前
|
JSON 前端开发 Java
Json格式数据解析
Json格式数据解析
|
8天前
|
JSON 安全 Swift
【Swift开发专栏】Swift中的JSON解析与处理
【4月更文挑战第30天】本文介绍了Swift中的JSON解析与处理。首先,讲解了JSON的基础,包括其键值对格式和在Swift中的解析与序列化方法。接着,展示了如何使用`Codable`协议简化JSON操作,以及处理复杂结构的示例。通过这些内容,读者能掌握在Swift中高效地处理JSON数据的方法。
|
8天前
|
分布式计算 DataWorks 关系型数据库
DataWorks产品使用合集之在DataWorks中,使用JSON解析函数将MySQL表中的字段解析成多个字段将这些字段写入到ODPS(MaxCompute)中如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
23 3
|
15天前
|
JSON 前端开发 Java
SpringBoot之JSON参数,路径参数的详细解析
SpringBoot之JSON参数,路径参数的详细解析
13 0
|
25天前
|
存储 JSON JavaScript
「Python系列」Python JSON数据解析
在Python中解析JSON数据通常使用`json`模块。`json`模块提供了将JSON格式的数据转换为Python对象(如列表、字典等)以及将Python对象转换为JSON格式的数据的方法。
34 0
|
29天前
|
存储 JSON 数据格式
python读取同路径下的json文件,并解析
使用Python的`json`模块读取和解析JSON文件,首先导入json模块,再用`open()`结合`json.load()`读取文件内容到`data`。通过字典和列表语法访问JSON数据,如`data['name']`获取名字,`data['items']`获取列表,可循环遍历列表元素。
12 0
|
1月前
|
存储 JSON JavaScript
【嵌入式开源库】cJSON的使用,高效精简的json解析库
【嵌入式开源库】cJSON的使用,高效精简的json解析库
|
2月前
|
存储 JSON Apache
揭秘 Variant 数据类型:灵活应对半结构化数据,JSON查询提速超 8 倍,存储空间节省 65%
在最新发布的阿里云数据库 SelectDB 的内核 Apache Doris 2.1 新版本中,我们引入了全新的数据类型 Variant,对半结构化数据分析能力进行了全面增强。无需提前在表结构中定义具体的列,彻底改变了 Doris 过去基于 String、JSONB 等行存类型的存储和查询方式。
揭秘 Variant 数据类型:灵活应对半结构化数据,JSON查询提速超 8 倍,存储空间节省 65%
|
6天前
|
JSON JavaScript Java
从前端Vue到后端Spring Boot:接收JSON数据的正确姿势
从前端Vue到后端Spring Boot:接收JSON数据的正确姿势
18 0
|
8天前
|
JSON 数据格式 Python
Python标准库中包含了json模块,可以帮助你轻松处理JSON数据
【4月更文挑战第30天】Python的json模块简化了JSON数据与Python对象之间的转换。使用`json.dumps()`可将字典转为JSON字符串,如`{"name": "John", "age": 30, "city": "New York"}`,而`json.loads()`则能将JSON字符串转回字典。通过`json.load()`从文件读取JSON数据,`json.dump()`则用于将数据写入文件。
15 1

推荐镜像

更多