尝试将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
个对象转换为0
或1
。当然,我可以从!!perl/scalar:JSON::PP::Boolean
输出中删除每个YAML
字符串,但在我看来这不是一个正确的解决方案。
那么,将所有JSON::PP::Boolean
个对象转换为简单0
和1
的简单方法是什么,因此YAML
会生成
---
some:
- isFlagged: 1
name: Some name
- isFlagged: 0
name: Some other name
答案 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);