2014-10-08 5 views
0

에서 몇 열을 무시 ":"https "의 사용자 이름"user_id ": null"actor ":"https "의 사용자 이름"actor_id ": null"org_id ": null"action ":"user.failed_login ""created_at ": 1412256345456789"data " { "actor_location"{ "위치"{ "북"널 "경도"널}}} 펄 DBI는이 코드를 사용했습니다 출력

출력 :

KEYS : actor_ip, note, user, user_id, actor, actor_id, org_id, 액션, created_at, data, lon,

VALUES : '127.0.0.1', 'Git', 'https'의 사용자 이름, null , ''https '의 사용자 이름, null,'user.failed_login ', 1412256456789, {'actor_location ', null

다음 두 키와 값을 출력에서 ​​제거하고 싶습니다. 아래 정규 표현식을 알려주십시오.

"user":"Username for 'https"  

"data":{"actor_location":{"location":{"lat":null "lon":null}}}  
당신은 단순히 키를 제외해야
+5

스택 오버플로에 오신 것을 환영합니다. 곧 [About] 페이지를 읽으십시오. 귀하의 데이터가 어디서 오는지 분명하지 않습니다. 그것은 비참한 JSON 형식처럼 보입니다. 당신이 사용했다고 말한 코드는 생략했습니다. 삽입하려는 테이블의 스키마를 제공하지 않았습니다. 입력이 한 줄이든 여러 줄이든 명확하지 않습니다. 출력 또는 삽입에서 생략 할 열이 명확하지 않습니다. 사실, 일반적으로 귀하의 질문은 명확하지 않습니다. –

답변

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입니다.