Perl JSON如何在解码给定JSON文件时处理密钥覆盖

Perl JSON如何在解码给定JSON文件时处理密钥覆盖,json,perl,Json,Perl,我想解码一个给定的json文件,其结构如下。我的问题是,当我把它解码成perl时,我发现它与片有密钥冲突。有没有办法从json解码中获得一个不会覆盖冗余元素的哈希结构?我可以想到阵列,欢迎任何想法和建议 "register": { "name" : "CTRL", "desc" : "Control Register 1", "mode" : "rw", "reset_value": "0x0000_0000",

我想解码一个给定的json文件,其结构如下。我的问题是,当我把它解码成perl时,我发现它与片有密钥冲突。有没有办法从json解码中获得一个不会覆盖冗余元素的哈希结构?我可以想到阵列,欢迎任何想法和建议

 "register": {

     "name"       : "CTRL",
     "desc"       : "Control Register 1",
     "mode"       : "rw",
     "reset_value": "0x0000_0000", 
     "addr_offset": "+0x4",

     "slice": {
       "name": "Reserved",
       "msb" : 3,
       "lsb" : 2,
       "desc": "Reserved. Leave 0."
     },

     "slice": {
       "name": "en",
       "msb" : 1,
       "lsb" : 1,
       "desc": "Port enable"
     },

     "slice": {
       "name": "Lbm",
       "msb" : 0,
       "lsb" : 0,
       "desc": "Loop back mode"
     }

  },
根据

对象中的名称应该是唯一的

所以“正确”的答案是-不要使用重复的键来执行JSON,使用数组

{
  "register": {
    "name":        "CTRL",
    "desc":        "Control Register 1",
    "mode":        "rw",
    "reset_value": "0x0000_0000",
    "addr_offset": "+0x4",
    "slices": [
      {
        "name": "Reserved",
        "msb":  3,
        "lsb":  2,
        "desc": "Reserved. Leave 0."
      },
      {
        "name": "en",
        "msb":  1,
        "lsb":  1,
        "desc": "Port enable"
      },
      {
        "name": "Lbm",
        "msb":  0,
        "lsb":  0,
        "desc": "Loop back mode"
      }
    ]
  }
}
然后用perl进行解码:

my $stuff = decode_json(
   do { local $/; <$input> }
);

print Dumper $stuff;
但是,如果您确实必须这样做,您可能能够根据

对象中的名称应该是唯一的

所以“正确”的答案是-不要使用重复的键来执行JSON,使用数组

{
  "register": {
    "name":        "CTRL",
    "desc":        "Control Register 1",
    "mode":        "rw",
    "reset_value": "0x0000_0000",
    "addr_offset": "+0x4",
    "slices": [
      {
        "name": "Reserved",
        "msb":  3,
        "lsb":  2,
        "desc": "Reserved. Leave 0."
      },
      {
        "name": "en",
        "msb":  1,
        "lsb":  1,
        "desc": "Port enable"
      },
      {
        "name": "Lbm",
        "msb":  0,
        "lsb":  0,
        "desc": "Loop back mode"
      }
    ]
  }
}
然后用perl进行解码:

my $stuff = decode_json(
   do { local $/; <$input> }
);

print Dumper $stuff;

但是,如果您确实必须这样做,您可能能够使用
JSON

不清楚如何将对象解码为perl?你能详细说明一下吗?你的问题是这不是正确的JSON。钥匙必须是唯一的。您需要一个匿名哈希数组,而不是复制密钥。不清楚如何将对象解码为perl?你能详细说明一下吗?你的问题是这不是正确的JSON。钥匙必须是唯一的。您需要一个匿名哈希数组,而不是复制密钥