2017-04-12 1 views
0

나는 다음과 같은 JSON 배열이 있습니다정규식 부정적 예측과 JSON에 대한

[ 
    { 
     "roleId": 128, 
     "roleName": "B", 
     "Permissions": [] 
    }, 
    { 
     "roleId": 310, 
     "roleName": "ROLE", 
     "Permissions": [ 
     { 
      "permissionId": 8074, 
      "isPermissionActive": true 
     }, 
     { 
      "permissionId": 2271, 
      "isPermissionActive": true 
     }, 
     { 
      "permissionId": 8075, 
      "isPermissionActive": true 
     }, 
     { 
      "permissionId": 2275, 
      "isPermissionActive": true 
     } 
     ] 
    }, 
    { 
     "roleId": 201, 
     "roleName": "B", 
     "Permissions": [] 
    }, 
    { 
     "roleId": 5, 
     "roleName": "B", 
     "Permissions": [] 
    } 
    ] 

내가 null 이외의 권한으로 jsons의 roleId를 선택해야합니다. 나는 부정적인 선견지명을 사용하려고했지만 나던 한 것 같습니다.
\{(\s*.*?(?!"Permissions":\s*\[\]))*\}을 시도 했으므로 roleId을 선택하기 전에 json에서 정확한 일치를 얻고 싶었지만 사용 권한 배열의 모든 jsons 및 내부 jsons와 일치하는 것으로 보입니다. 미리보기를 바꿔서 올바르게 일치시켜야합니다.

(?<="roleId":)\d*(?=(?:[^{]*"Permissions": \[(?!]))) 

설명 : 첫 번째 부분 (?<="roleId":)\d*가 rollId 두 번째 부분을 (?=(?:[^{]*"Permissions": \[(?!]))) 부정적 예측을 찾기 위해 긍정적 인 lookbehind를 사용 비 찾을 수 저는 현재 다음과 같은 정규식을 시도 3.

답변

2

숭고한 텍스트에 일치하고있어 null 이외의 액세스권을 가지는 rollId를 찾아내는 것에는, null 이외의 액세스권과 긍정의 Lookahead가 필요합니다. See detailed explanation here

1

이 질문에 직접 답하는 것은 아니지만 JavaScript로 JSON을 처리하거나 JSON을 기본 유형으로 쉽게 변환 할 수있는 여러 언어 중 하나를 사용하는 것이 더 자연 스럽다는 것을 지적하고자합니다. 양자 택일로, 당신은 jq로 JSON 처리 언어를 사용할 수 있습니다 비어 있지 않은 권한을 가진 역할 ID의 배열을 생산

jq ' 
    map(select(.Permissions != []) | .roleId) 
' 

합니다.

+0

좋은 옵션! 미래를 염두에 두겠다! – TheChetan

1

숫자가 "roleId"인지 확인하기위한 조사.
"권한"에 콧수염이 있는지 확인하기위한 미리보기.

(?<="roleId":)\d+(?=[^\}]*?"Permissions":\s*\[\s*\{) 

시험이 here