2013-07-31 62 views
0

現在,我有我的JSON從選擇創建從MySQL,看起來像這樣:改變我的JSON字符串在一個循環

$sth->execute() 
    or die "SQL Error: $DBI::errstr\n"; 

while (my $row = $sth->fetchrow_hashref){ 
    push @output, $row; 
    # print $row->{image}; 
    $photo = $row->{image}; 
    my $file = "$photo"; 
    my $document = do { 
     local $/ = undef; 
     open my $fh, "<", $file 
      or die "could not open $file: $!"; 
     <$fh>; 
    }; 

    my $encoded= MIME::Base64::encode_base64($document); 
} 

隨着JSON看起來像這樣:

{"myData":[{"favorited":null,"date":"2013-07-31","preferredMeetingLocation":"meet here","description":"Clothes desc","image":"/var/www/pictures/photo-7h1sIsXQ.jpg","id":"31","title":"clothing ","price":"12","category":"Clothing","isbn":null}]} 

而我想要做的是代替它顯示圖像的文件路徑的位置,我想將其更改爲json字符串中每個對象的實際圖像。最終我想將每個圖像編碼爲base64,但我知道如何做到這一點。我只需要幫助將/var/www/pictures/photo-7h1sIsXQ.jpg更改爲我可以使用的編碼。

+0

好像在您通過數據的第一次迭代期間檢查它會是最簡單的。如果行鍵eq圖像然後運行您的正則表達式的值。也許在最後/如果所有圖像路徑被格式化後都會返回所有內容 –

+0

問題是什麼?你不知道如何打開一個文件並閱讀它? – daxim

+0

@daxim我這樣做,但我不知道如何在$ jsonData中訪問它。我將如何循環訪問每個圖片的ref? – BluGeni

回答

0

正如daxim正確表示的那樣,您希望在將數據結構編碼爲JSON之前替換圖像數據。您將需要使用MIME::Base64進行編碼。其結果可能看起來類似於:

use MIME::Base64 qw(encode_base64); 
use File::Slurp; 

my $base64_encoded_image = encode_base64 scalar read_file($filename, binmode => ':raw'); 
+0

如何將我的json從現在的圖像更改爲每個對象的新編碼字符串? – BluGeni

+0

@BluGeni ???只需在數據結構中更新該字段:'$ row - > {image} = $ encoded'。這真的很複雜嗎? – amon

+0

對不起,我不知道你可以做到這一點,儘管完美,但謝謝你的額外幫助。 – BluGeni

0

編碼前改變$row->{image}

+0

完美這是我想要的,我已經更新了我的代碼,我最後一個問題是如何將圖像的json更改爲我的$文檔? – BluGeni