2014-10-08 83 views
0

几列我用这个代码: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}}}  
+5

欢迎来到Stack Overflow。请尽快阅读[关于]页面。我不清楚你的数据来自哪里。它看起来像一个混蛋的JSON格式。你省略了你说过的代码。你还没有给出你想要插入的表的模式。目前还不清楚输入是单行还是多行。您不清楚在输出或插入中省略了哪些列。事实上,一般来说,你的问题并不清楚。 – 2014-10-08 06:25:47

回答

0

你只需要排除的按键,你不想:

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