मैंने निम्न कोड स्निपेट का उपयोग करके एलीस्टेखर्च के लिए एक प्रश्न बनाया है:
$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 );
यहाँ अनुरोध क्या प्रिंट करता है (अगर मैं इसे प्रिंट करने से पहले $ myResults प्रिंट करता हूं; यह भी काम करता है यदि आप इसे ब्राउज़र में टाइप करते हैं):
{"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"
}
}
}
}}}
मैं यहाँ क्या करने की कोशिश कर रहा हूँ, मैं खेतों के नाम तक पहुँच रहा हूँ। मैं इस तरह से कुछ करके उनके अंदर क्या संग्रहित कर रहा हूँ, उनके नाम पाने में सक्षम हूँ:
print "$decoded->{ "index" }{ "mappings" }{ "type" }{ "properties" }{ "FIELD1" }{ "type" }";
लेकिन मैं अभी तक "FIELD1" का प्रिंट आउट नहीं ले पा रहा हूं। मैंने हर चीज को प्रिंट करने की कोशिश की है के सिवाय प्रकार के लिए, लेकिन यह केवल एचएएसएच (0x7ff60b345978) को प्रदर्शित करता है।
किसी भी तरह की सहायता का स्वागत किया जाएगा!
धन्यवाद
उत्तर:
जवाब के लिए 2 № 1$decoded->{index}{mappings}{type}{properties}
गुणों के हैश का एक संदर्भ है। आप उस हैश की चाबी चाहते हैं, इसलिए आप उपयोग करते हैं keys
.
my @property_names = keys(%{ $decoded->{index}{mappings}{type}{properties} });
उत्तर № 2 के लिए 1
जो आप प्रिंट करना चाहते हैं, उसके आसपास के अनावश्यक दोहरे उद्धरणों से छुटकारा पाकर आप जो कर रहे हैं, उसे सरल बनाएं।
बस यह करो:
print $decoded->{ "index" }{ "mappings" }{ "type" }{ "properties" }{ "FIELD1" }{ "type" };
या पर्ल स्वचालित रूप से आपके लिए हैश कीज़ में एकल शब्दों को बदल देता है:
print $decoded->{ index }{ mappings }{ type }{ properties }{ FIELD1 }{ type };