Die Art, wie ich die Frage verstehe, haben Sie zwei Hashes, die die gleichen Schlüssel haben. Wenn der erste Wert keinen Wert für einen bestimmten Schlüssel hat, möchten Sie den Wert aus dem anderen Hash dorthin setzen.
Weil Sie nicht angegeben haben, wie Sie diese Hashes erstellen, habe ich meine eigene Lösung dafür gefunden. Sie können es wahrscheinlich ignorieren. Ich benutzte Config::General und einige Tricks, um "
und :
loszuwerden, um die pid-Datei und JSON für den JSON zu lesen.
use strict;
use warnings;
use Config::General;
use JSON 'decode_json';
use Data::Dumper;
# read the pid file
my %cfg_pid = Config::General->new(
-NormalizeOption => sub { my $x = shift; $x =~ s/^"|":$//g; $x; },
-NormalizeValue => sub { my $x = shift; $x =~ s/^"|"$//g; $x },
-ConfigFile => \*DATA
)->getall;
# read the json file
my $json = <<'JSON';
{
"connection": {
"file": {
"file_connection_1": {
"CLOUD_AUTHENTICATION": "",
"CLOUD_CONN_PROTOCOL": "",
"CONN_NAME": "file_connection_1",
"FILE_DIR": "/home/directory"
}
}
}
}
JSON
my $cfg_json = decode_json($json);
# this is before
print Dumper $cfg_json;
# actual part that you want
foreach my $key (keys %{ $cfg_pid{General} }) {
$cfg_json->{connection}->{file}->{file_connection_1}->{$key} = $cfg_pid{General}->{$key}
unless $cfg_json->{connection}->{file}->{file_connection_1}->{$key};
}
# and this is after
print Dumper $cfg_json;
__DATA__
<General>
"CLOUD_AUTHENTICATION": "YES"
"CLOUD_CONN_PROTOCOL": "PRTCL"
"CONN_NAME": "file_connection_1"
"FILE_DIR": "/home/directory"
</General>
Alles, was es wirklich ist den Schlüssel des pid Dateihash tut laufen, und aktivieren Sie im json Hash, wenn es ein Wert dieses Schlüssels ist. Wenn dieser Wert nicht wahr ist (dh der Schlüssel existiert nicht, der Wert ist undef
, ein leerer String q{}
oder), wird er auf den Wert des PID-Hashes gesetzt. Sie können natürlich auch explizit nach leeren Zeichenketten suchen.
Der Ausgang ist wie folgt.
$VAR1 = {
'connection' => {
'file' => {
'file_connection_1' => {
'FILE_DIR' => '/home/directory',
'CONN_NAME' => 'file_connection_1',
'CLOUD_CONN_PROTOCOL' => '',
'CLOUD_AUTHENTICATION' => ''
}
}
}
};
$VAR1 = {
'connection' => {
'file' => {
'file_connection_1' => {
'FILE_DIR' => '/home/directory',
'CONN_NAME' => 'file_connection_1',
'CLOUD_CONN_PROTOCOL' => 'PRTCL',
'CLOUD_AUTHENTICATION' => 'YES'
}
}
}
};
wo und was .......... Diese zwei Punkte sind in Ihrer Frage verfehlt. Wo -> Server-Seite oder Front-End und welche Sprache verwenden Sie. – Hemakumar
@Hema Entsprechend den Tags und dem Titel der Frage verwendet das OP Perl. – ThisSuitIsBlackNot
Sie sollten den Code hinzufügen, den Sie bereits haben. Wie konvertieren Sie die Dateien in Hashes? Wie sehen die resultierenden Datenstrukturen aus? Zeig's ihnen. Sie können Ihre Frage bearbeiten, um diese Details hinzuzufügen. – simbabque