Dopytoval som dopyt do spoločnosti Elasticsearch pomocou nasledujúceho útržku kódu:
$ua = LWP::UserAgent->new;
$server_endpoint = "http://localhost:9200/index/type/_mapping?pretty=true";
$resp = $ua->get( $server_endpoint );
$myResults = $resp->content();
$decoded = JSON::XS::decode_json( $myResults );
Táto požiadavka sa vytlačí (ak vytlačím $ myResults pred dekódovaním; funguje to aj v prípade, že ste ju zadali iba v prehliadači):
{"index" : {
"mappings" : {
"type" : {
"properties" : {
"@timestamp" : {
"type" : "date",
"format" : "dateOptionalTime"
},
"@version" : {
"type" : "string"
},
"FIELD1" : {
"type" : "long"
},
"FIELD2" : {
"type" : "double"
},
"FIELD3" : {
"type" : "string"
},
"FIELD4" : {
"type" : "string"
},
"FIELD5" : {
"type" : "double"
},
...
"FIELDN" : {
"type" : "string"
}
}
}
}}}
Čo sa tu snažím urobiť, je prístup k názvom polí. Dokážem získať názvy toho, čo je v nich uložené tým, že urobím niečo také:
print "$decoded->{ "index" }{ "mappings" }{ "type" }{ "properties" }{ "FIELD1" }{ "type" }";
Ale zatiaľ nemôžem vytlačiť FIELD1. Skúsil som vytlačiť všetko okrem pre daný typ, ale zobrazuje iba HASH (0x7ff60b345978).
Akákoľvek pomoc by bola veľmi ocenená!
Vďaka
odpovede:
2 pre odpoveď č. 1$decoded->{index}{mappings}{type}{properties}
je odkaz na hash vlastností. Chcete kľúče od hash, aby ste ich používali keys
.
my @property_names = keys(%{ $decoded->{index}{mappings}{type}{properties} });
1 pre odpoveď č. 2
Zjednodušte to, čo robíte, zbavením sa zbytočných úvodzoviek okolo toho, čo chcete tlačiť.
Stačí to urobiť:
print $decoded->{ "index" }{ "mappings" }{ "type" }{ "properties" }{ "FIELD1" }{ "type" };
alebo nechajte Perl, aby za vás automaticky premenil jednotlivé slová v hash klávesoch na reťazce:
print $decoded->{ index }{ mappings }{ type }{ properties }{ FIELD1 }{ type };