Perl json 带空格的键

Perl json keys with spaces

我如何解析 perl json 键中有空格的对象

{
   "abc" : [
       "lmn" : {
          "Ab Cd" : "Xy Zw",
          "Ef Gh" : "Pq Rs",
       }
   ]
}

根据定义,使用 JSON 解析器解析 JSON。 CPAN 上存在多个 JSON 个解析器,包括 Cpanel::JSON::XS。它可以毫无问题地处理其中包含空格的键,每个其他 JSON 解析器也应该如此。

请注意,您拥有的不是 JSON。自从您询问 JSON.

以来,我假设这些错误是拼写错误

键中的空格对任何 JSON 解析器都没有任何问题。

但是,您的 JSON 中有两个问题会导致任何解析器出现问题。其他人注意到 "Pq Rs" 后的额外逗号,但您还有一个包含 key/value 对(具有键 "lnm")的数组,该数组需要位于对象内。

最初,我只是删除了逗号和 运行 这段代码:

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

use Data::Dumper;
use JSON;

my $json = '{
   "abc" : [
       "lmn" : {
          "Ab Cd" : "Xy Zw",
          "Ef Gh" : "Pq Rs"
       }
   ] 
}';

my $data = decode_json($json);

say Dumper $data;

这给出了一个错误:

, or ] expected while parsing array, at character offset 28 (before ": {\n "Ab C...")

我通过在 lnm 对象周围插入 { ... } 来修复它。

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

use Data::Dumper;
use JSON;

my $json = '{
   "abc" : [ {
       "lmn" : {
          "Ab Cd" : "Xy Zw",
          "Ef Gh" : "Pq Rs"
       }
   } ] 
}';

my $data = decode_json($json);

say Dumper $data;

然后我得到了这个输出:

$VAR1 = {
          'abc' => [
                     {
                       'lmn' => {
                                  'Ab Cd' => 'Xy Zw',
                                  'Ef Gh' => 'Pq Rs'
                                }
                     }
                   ]
        };

我想这就是您所期待的。