在循环中更改我的json字符串

时间:2013-07-31 14:59:04

标签: json perl

现在我的json是从mysql中选择创建的,看起来像这样:

$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更改为我可以使用和编码的内容。

2 个答案:

答案 0 :(得分:0)

在编码之前更改$row->{image}

答案 1 :(得分: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');