2015-04-01 68 views
1

我有一個JSON,我試圖使用Perl代碼進行修改。修改將在Perl中使用JSON編碼的數據結構

{ 
    "Person":{ 

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

我需要上面的JSON轉換爲這樣的事情:

{ 
    "Person":{ 

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

有人可以給在Perl這樣的一些例子。

+2

簡單:JSON解碼成原生Perl的結構,操作那些結構,然後重新編碼到json。 – 2015-04-01 18:51:41

+0

@MarcB:我知道我可以如何在perl數據結構中的現有標記中插入新標記。但在這種情況下,我需要覆蓋現有的結構(標籤文件名),並將其嵌套(向下兩級),層次結構根植於同一父級。 (workList)。那就是worklist - > fileName現在變成了worklist-> directoryList-> directory-> filename。 – user1188611 2015-04-01 19:05:08

+0

讓我知道如果您有任何建議 – user1188611 2015-04-01 19:05:23

回答

2
$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?

+0

相關:http://stackoverflow.com/questions/1490356 – mob 2015-04-01 19:17:52

+0

謝謝你回覆我只是做了同樣的修復。 – user1188611 2015-04-01 19:20:24

+0

@ user1188611和暴徒你能解釋一下嗎?如果你這樣做,我會++ ;-)'delete'是否從'$ data'哈希值中移除值***並返回它?我認爲通過在匿名數組構造函數('[]')內執行此操作,可以將哈希項添加回新位置。 – 2015-04-01 20:51:53