Perl的DBI - 忽略输出
问题描述:
几列我用这个代码:Perl的DBI - 忽略输出
while (my $line = <IN>)
{
chomp $line;
if($line =~ /(.*?:)\{(.+)\}/)
{
my $value2 = $2;
my @values2 = split(/,/, $value2);
my $insertKeys;
my $insertValues;
foreach $data(@values2)
{
chomp $data;
my ($key, $value) = split(/:/, $data);
$key =~ s/"//g;
$value =~ s/"/'/g;
$insertKeys .= $key.',';
$insertValues .= $value.',';
}
输入:
“actor_ip”: “127.0.0.1”, “注意”: “从混帐”,“用户“:”用户名为'https'“user_id”:null“actor”:“用户名为'https'”actor_id“:null”org_id“:null”action“:”user.failed_login“”created_at“:1412256345456789”data“ :{ “actor_location”:{ “位置”:{ “LAT”:空 “LON”:空}}}
输出:
KEYS:actor_ip,note,user,user_id,actor,actor_id,org_id,action,created_at,data,lon,
VALUES:'127.0.0.1','From Git','Username for'https',null ,'用户名为'https',null,null,'user.failed_login',1412256456789,{'actor_location',null
我想从输出中删除这两个键和值请让我知道如何将下面的表达式
"user":"Username for 'https"
"data":{"actor_location":{"location":{"lat":null "lon":null}}}
答
你只需要排除的按键,你不想:
if ($key !~ /^(data|user)$/)
{
$insertKeys .= $key.',';
$insertValues .= $value.',';
}
然而,更灵活的设计可能是插入键/值对的一个哈希:
my %params;
foreach $data(@values2)
{
chomp $data;
my ($key, $value) = split(/:/, $data);
$key =~ s/"//g;
$value =~ s/"/'/g;
$params{$key} = $value;
}
那么这将是任何你想要的以后的参数很容易做到。
此外,您不显示您的DBI代码,但此代码建议您手动构建整个插入查询字符串。更安全(更好设计)的方法是parameterized query。
欢迎来到Stack Overflow。请尽快阅读[关于]页面。我不清楚你的数据来自哪里。它看起来像一个混蛋的JSON格式。你省略了你说过的代码。你还没有给出你想要插入的表的模式。目前还不清楚输入是单行还是多行。您不清楚在输出或插入中省略了哪些列。事实上,一般来说,你的问题并不清楚。 – 2014-10-08 06:25:47