json - 对 Perl 数据结构的每个元素应用不同的函数

标签 json perl

给定一个任意嵌套的数据结构,我如何创建一个新的数据结构,以便根据元素的类型对所有元素应用一个函数来标准化其中的所有元素.例如,我可能有

$data = {
    name => 'some one',
    date => '2010-10-10 12:23:45',
    sale => [34, 22, 65],
    cust => {
        name => 'Jimmy',
        addr => '1 Foobar Way',
        amnt => 452.024,
        item => ['books', 'pens', 'post-it notes']
    }
}

我想将所有文本值转换为大写,将所有日期转换为 UTC 日期时间,计算所有整数的平方,将所有实数向下舍入并加 1,等等。因此,实际上,我想根据元素的类型对每个元素应用不同的函数。

实际上,数据可能通过数据库查询到达,在这种情况下,它们已经是 Perl 数据结构,或者它们可能以 JSON 对象的形式出现,在这种情况下,我可以使用 JSON::from_json 将其转换为 Perl 数据结构。这个想法是根据值类型标准化数据结构中的所有值,然后将 Perl 数据结构作为 JSON 对象再次吐出。

我读了the answers to executing a function on every element of a data structure并觉得 Data::Rmap 可以解决问题,但无法弄清楚如何。 似乎 Rmap 也适用于所有,而不仅仅是

最佳答案

Data::Rmap 非常简单明了|你提到过。

use Data::Rmap qw( rmap );
rmap { $_ = transform($_); } $data;

关于评论中的问题:

use Data::Rmap   qw( rmap );
use Scalar::Util qw( looks_like_number );

# Transforms $_ in place.
sub transform {
   if (looks_like_number($_)) {
      if (...) {
         $_ *= 2;
      }

      $_ = 0+$_;  # Makes it look like a number to JSON::XS
   } else {
      ...
   }
}

&rmap(\&transform, $data);

关于json - 对 Perl 数据结构的每个元素应用不同的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9968440/

相关文章:

javascript - 强制定向布局,在鼠标悬停时列出源和目标值

ios - 无法将数据转换为字符周围的字符串

Perl 脚本用于记录外部可执行文件输出和错误,同时仍在运行

ruby - 查找和替换多个单词

json - 使用 @ResponseBody 自定义 HttpMessageConverter 来做 Json 事情

javascript - JSON 中的 JSON 字符串

C++:缓存 JSON 而不是对象会减少内存消耗吗?

regex - Perl 正则表达式 : How to grab the part that is the same

html - 如何使用 Perl 将文件转换为 HTML 表格?

PHP等同于Perl格式化函数