【问题标题】:Modifying data structure that will be encoded using JSON in perl修改将在 perl 中使用 JSON 编码的数据结构
【发布时间】:2015-06-06 13:20:45
【问题描述】:

我有一个 JSON,我正在尝试使用 perl 代码进行修改。

{
    "Person":{

       "personalData": {
          "workList": {
              "file":{ 
                  "fileName": "/usr/temp/ABC.txt" }
                },
            }
         }
       }   
    }  

我需要将上面的 JSON 转换成这样的:

{
    "Person":{

       "personalData": {
          "workList": {
              "directoryList":{
                   "directory":[
                       "file":{ 
                           "fileName": "/usr/temp/ABC.txt" }
                          }
                     ]
                }
            }
         }
       }   
    }

有人可以举一些在 perl 中这样做的例子吗?

【问题讨论】:

  • 简单:将 json 解码为原生 perl 结构,操作该结构,然后重新编码为 json。
  • @MarcB:我知道如何在 perl 数据结构中的现有标签中插入新标签。但是在这种特殊情况下,我需要覆盖现有结构(标记文件名)并将其嵌套(向下两级)以同一个父级为根的层次结构。 (工作清单)。即 worklist -> fileName 现在变为 worklist->directoryList->directory->filename。
  • 如果您有任何建议,请告诉我
  • 我建议阅读 perldoc perldsc(官方 Perl 数据结构食谱)和 Programming Perl 中的 Data Structures 章节。它们将帮助您了解如何操作任何数据结构,无论其嵌套如何,因此您不必通过盲目的复制粘贴方法不断学习。
  • @ThisSuitIsBlackNot:感谢您的建议,我实际上能够自己弄清楚。但我会确保我至少阅读了食谱和数据结构来学习 perl

标签: json perl


【解决方案1】:
$data->{Person}{personalData}{workList}{directoryList}{directory} =
    [ delete $data->{Person}{personalData}{workList}{file} ];

或者更简洁,

$tmp = $data->{Person}{personalData}{workList};
$tmp->{directoryList}{directory} = [ delete $tmp->{file} ];

有关其工作原理的说明,请参阅:How to replace a Perl hash key?

【讨论】:

  • @user1188611 和 mob 你能解释一下吗?如果你这样做,我会 ++ 你;-) delete 是否都从 $data 散列 中删除值返回它?我认为通过在匿名数组构造函数 ([ ]) 中执行此操作,可以将哈希条目添加回新位置。
  • @G。西托。是的,请参阅上面的相关链接。
  • 谢谢,因为您对另一个问题的回答已被接受,我认为它仍位于页面顶部。我会编辑你的回复:-)
猜你喜欢
  • 2015-11-02
  • 2018-04-12
  • 2016-01-12
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
  • 2018-07-21
  • 2014-11-15
  • 2020-12-25
相关资源
最近更新 更多