/ / Prístup k menám prvkov JSON pomocou Perlu - json, perl, http

Prístup k menám prvkov JSON s Perl - json, perl, http

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 };