gpt4 book ai didi

json - 格式化数组的 JSON 输出

转载 作者:行者123 更新时间:2023-12-04 18:28:36 24 4
gpt4 key购买 nike

我想要JSON:XS在一行中输出数组元素。例如:

use warnings;
use strict;
use JSON::XS;

my $h={a=>[1,2,3,4],b=>3};
my $coder = JSON::XS->new->pretty;
my $txt = $coder->encode($h);
print $txt;

这给出了输出:

{
"b" : 3,
"a" : [
1,
2,
3,
4
]
}

而我想要的输出是:

{
"b" : 3,
"a" : [ 1, 2, 3, 4 ]
}

最佳答案

此行为已硬编码在模块中。如果您可以在计算机上修补模块代码,则可以轻松完成(以下说明适用于 Linux CPAN):

  1. 转到 CPAN 构建目录 /root/.cpan/build/JSON-XS-3.01-*(实际名称末尾有一些随机字符)
  2. 将以下补丁应用于 XS.xs:
--- XS.xs.orig  2014-11-08 14:22:37.682348401 +0300
+++ XS.xs 2014-11-08 14:30:01.447643990 +0300
@@ -486,6 +486,15 @@
encode_space (enc);
}

+INLINE void
+encode_comma_singleline (enc_t *enc)
+{
+ encode_ch (enc, ',');
+
+ if (enc->json.flags & F_SPACE_AFTER)
+ encode_space (enc);
+}
+
static void encode_sv (enc_t *enc, SV *sv);

static void
@@ -500,24 +509,18 @@

if (len >= 0)
{
- encode_nl (enc); ++enc->indent;
-
for (i = 0; i <= len; ++i)
{
SV **svp = av_fetch (av, i, 0);

- encode_indent (enc);
-
if (svp)
encode_sv (enc, *svp);
else
encode_str (enc, "null", 4, 0);

if (i < len)
- encode_comma (enc);
+ encode_comma_singleline (enc);
}
-
- encode_nl (enc); --enc->indent; encode_indent (enc);
}

encode_ch (enc, ']');
  1. 运行 make,然后运行 ​​make install

  2. 检查你的脚本:

$ perl json.pl
{
"a" : [1, 2, 3, 4],
"b" : 3
}

一些必要的免责声明:接受在本地更改模块的风险由您自己承担,正确的方法当然是制作一个接受相应配置选项的好补丁,并将此补丁提交给模块的作者。但是,如果您只需要它在您的计算机上运行,​​那将是完美的。

关于json - 格式化数组的 JSON 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26815405/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com