【问题标题】:Perl json keys with spaces [duplicate]带空格的Perl json键[重复]
【发布时间】:2020-06-17 17:33:51
【问题描述】:

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

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

【问题讨论】:

标签: json regex perl jsonparser


【解决方案1】:

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

请注意,您拥有的不是 JSON。自从您询问 JSON 以来,我假设错误是拼写错误。

【讨论】:

  • XS 可以完成这项工作,但 PP 可以吗? (那个逗号是错字)
  • 慢很多,但是是的
  • 你能告诉我如何因为 $VAR1 -> {abc} -> {lmn} -> {Ab Cd} 这给了我一个无法通过包“Cd”定位对象方法“Ab”
  • @Alter16, $VAR1 -> {abc} -> {lmn} -> {Ab Cd} 应该是 $VAR1 -> {abc} -> {lmn} -> {'Ab Cd'}。如果它是“单词”,则只能省略键表达式周围的引号。
  • Yesss for 'Ab Cd' 我得到了 Use of uninitialized value 错误
【解决方案2】:

键中的空格对任何 JSON 解析器都不会造成任何问题。

但是,您的 JSON 中有两个问题会导致任何解析器出现问题。其他人注意到"Pq Rs" 之后的额外逗号,但您还有一个包含键/值对(键为"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;

这给出了一个错误:

或 ] 解析数组时应在字符偏移 28 处(在 ": {\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'
                                }
                     }
                   ]
        };

我认为,这正是你所期待的。

【讨论】:

  • 感谢您的有益观察,但我在获取 $VAR1 的价值时遇到了问题 -> {abc} -> {lmn} -> {'Ab Cd'}
  • @Alter16:“我有问题”是什么意思?这不是很清楚。请在您的问题中添加详细信息。
猜你喜欢
  • 2017-10-27
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 2021-09-05
  • 2017-03-16
  • 2020-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多