不知道你的文本文件的結構是什麼,以及如何一致的是。我認爲每個條目都是5行,每個條目的順序相同。如果是這種情況,可能有一種方法是一次讀取5行文本文件,將每行分配給相應的散列鍵,然後將該散列值存儲在一個數組中,稍後我們可以使用該數組作爲JSON結構體。也許一個更優雅的方式做到這一點,但對於這樣的事情:
#!/usr/bin/perl
use strict;
use warnings;
use autodie;
use JSON;
my $input_file = shift;
my @results;
open(my $fh, "<", $input_file);
# Read the text file 5 lines at a time, and store each line in the hash data with the desired keys.
while ((my @lines) = map { scalar(<$fh>) or() } 0..4) {
my %data = ('beername' => $lines[0],
'location' => $lines[1],
'ABV' => $lines[2],
'IBU' => $lines[3],
'Rating' => $lines[4],
);
# Store these hash refs in an array that we'll later convert to JSON.
push(@results, \%data);
}
# Write results to file.
open(my $json_out, ">", 'beers.json');
print {$json_out} encode_json(\@results);
這將導致「beers.json」文件,該文件將具有以下結構:
$ json_xs <beers.json
[
{
"ABV" : "5.2\n",
"IBU" : "13.65\n",
"location" : "Lawrence, Kansas, USA\n",
"Rating" : "Rating - 0.00\n",
"beername" : "23rd Street Wave the Wheat Ale\n"
},
{
"ABV" : "5.2\n",
"IBU" : "Unknown\n",
"location" : "Carbondale, Pennsylvania, USA\n",
"Rating" : "Rating - 0.00\n",
"beername" : "3 Guys & A Beerââ¬â¢d Wheat the People\n"
},
{
"location" : "Lake Orion, Michigan, USA\n",
"Rating" : "Rating - 0.00\n",
"beername" : "51 North Paint Creek Wheat\n",
"IBU" : "Unknown\n",
"ABV" : "4.8\n"
}
]
就像我說的,可能不夠高雅,完全依賴於每個啤酒的文件長度爲5行,每個啤酒的元數據每次都是相同的順序。但是,如果沒有別的辦法,這可能是一個很好的起點?
使用模塊[JSON](http://search.cpan.org/~ishigaki/JSON-2.94/lib/JSON.pm) – zdim
「失敗」是什麼意思?當你運行你的程序時會發生什麼?你預期會發生什麼?發表一個https://stackoverflow.com/help/mcve – Robert
我很困惑...你要求幫助存儲數據,但是你顯示一個文本文件而不是數據結構?! – ikegami