如何使用Perl打印JSON数据而不使用JSON模块?

Tem*_*jin 8 mysql perl json

我正在尝试为我在SourceForge上托管的字典项目编写自动完成功能.不幸的是,SF上的Perl没有安装JSON模块.如何在不使用模块本身的情况下解决此问题?作为模型,我在jensbits上使用JQuery UI自动完成指南.

这是Perl代码,它应该查询文本并发送到自动完成模块

#!/usr/bin/perl
use strict;
use CGI;
use DBI;
use JSON;
# HTTP HEADER 
print "Content-type: application/json; charset=iso-8859-1\n\n";

my $dbh = DBI->connect("DBI:mysql:database;mysql_read_default_file=/path/.my.cnf");

$dbh->do("set character set utf8");
$dbh->do("set names utf8");

my ($p, $sth, @query_output); 

$p = new CGI;
my $term = $p->param('term');

$sth = $dbh->prepare(qq{SELECT trim(both char(13) FROM article) AS value, definition FROM dict WHERE article like ?;});
$sth->execute('%'.$term.'%');

# LOOP THROUGH RESULTS
while ( my $row = $sth->fetchrow_hashref ){
push @query_output, $row;
}
#CLOSE THE DATABASE CONNECTION
$dbh->disconnect()
# JSON OUTPUT
print JSON::to_json(\@query_output);
Run Code Online (Sandbox Code Playgroud)

Dav*_*oss 7

为什么不使用local :: lib将模块安装到SourceForge上的用户目录中?


yko*_*yko 3

据我所知,JSON软件包不需要安装在系统中。您只需下载最新的 JSON 发行版,解压,将其上传到您的主机,然后让 Perl 知道在哪里获取代码:只需添加

use lib '/absolute/path/to/JSON/lib';
Run Code Online (Sandbox Code Playgroud)

use JSON;
Run Code Online (Sandbox Code Playgroud)

如果您不知道绝对路径或想让代码更可移植,您可以使用FindBin包来查找相对于您的二进制文件的 JSON 发行版目录:

use FindBin
use lib "$FindBin::Bin/JSON/lib";
Run Code Online (Sandbox Code Playgroud)

我希望这能解决您的问题。