使用perl

时间:2016-12-08 12:41:33

标签: json perl yaml

尝试将JSON转换为YAML。有这个代码

#!/usr/bin/env perl

use 5.014;
use warnings;

use JSON;
use YAML;

my $json_string = q(
{
   "some" : [
      { "isFlagged" : true, "name" : "Some name" },
      { "isFlagged" : false, "name" : "Some other name" }
   ]
}
);

my $data = decode_json($json_string);
say Dump($data);

它产生:

---
some:
  - isFlagged: !!perl/scalar:JSON::PP::Boolean 1
    name: Some name
  - isFlagged: !!perl/scalar:JSON::PP::Boolean 0
    name: Some other name

我需要将JSON::PP::Boolean个对象转换为01。当然,我可以从!!perl/scalar:JSON::PP::Boolean输出中删除每个YAML字符串,但在我看来这不是一个正确的解决方案。

那么,将所有JSON::PP::Boolean个对象转换为简单01的简单方法是什么,因此YAML会生成

---
some:
  - isFlagged: 1
    name: Some name
  - isFlagged: 0
    name: Some other name

2 个答案:

答案 0 :(得分:6)

使用YAML' Stringify option

{
    local $YAML::Stringify = 1;
    say Dump($data);
}

这使得YAML使用来自JSON :: PP :: Boolean的字符串化重载而不是转储对象内部。

答案 1 :(得分:0)

使用YAML::XS 0.67或更高版本,您可以执行以下操作:

#!/usr/bin/env perl

use 5.014;
use warnings;

use JSON;
use YAML::XS;

my $json_string = q(
{
   "some" : [
      { "isFlagged" : true, "name" : "Some name" },
      { "isFlagged" : false, "name" : "Some other name" }
   ]
}
);

my $data = decode_json($json_string);
local $YAML::XS::Boolean = 'JSON::PP';
say Dump($data);