2016-05-25 3 views
-1

Я хочу добавить пару ключевых значений к объекту JSON. Ниже приведена структура переменной Param {Data} для приведенного ниже кода.Добавление пары значений ключа к существующему объекту json в perl

$VAR1 = { 
    'ArticleID' => '86', 
    'OldTicketData' => { 
     ... 
    }, 
    'TicketID' => '67' 
}; 

Ниже приводится функция, в которой я хочу, чтобы выполнить указанную операцию:

sub PrepareRequest { 
    my ($Self, %Param) = @_; 
    my %TicketInfo = $Self->{TicketObject}->ArticleGet(
     ArticleID => $Param{Data}->{ArticleID}, 
     userID => $Param{Data}->{CustomerID}, 
    ); 

    my %newParamData = to_json($Param{Data}); 
    %newParamData->{'OldTicketData'}->{'Body'}=$TicketInfo{Body}; 

    return { 
     Success => 1, 
     Data => %newParamData, 
    }; 
} 

Выше функция возвращает OldTicketData '. Мне нужна следующая пара ключей, привязанная к элементу «OldTicketData» объекта JSON -> («Тело», $ TicketInfo {Body}). Рассмотрим, $ TicketInfo {Body} возвращает строку 'someString'.

ответ

3

Ваш код - неправильный путь. Сначала вам нужно добавить ключ к хеш-ссылке, прежде чем превращать его в JSON.

$Param{Data}->{'OldTicketData'}->{'Body'}=$TicketInfo{Body}; 
my $newParamData = to_json($Param{Data}); 

Кроме того, поскольку to_json возвращает строку, которая является скаляром, вам нужно использовать $newParamData вместо %newParamData.

Конечно, вам необходимо исправить return.

return { 
    Success => 1, 
    Data => $newParamData, 
}; 
+1

Я предполагаю, что to_json фактически возвращает строку, содержащую json ... – ysth

+0

Ooops. Я смешался с 'from_json'. Ваше право @ysth. – simbabque