2017-05-18 1 views
0

simplejson 파이썬 라이브러리를 사용하여 특정 JSON 문자열을 디코딩하려고했습니다. 유효하지 않은 JSON의 상대 라인 번호 찾기

invalid_json = """ 
{ 
    "numbers": [ 
    1, 
    2 
    3 
    ], 
    "boolean": true, 
    "null": null, 
    "number": 123, 
    "object": { 
    "a": "b", 
    "c": "d", 
    "e": "f" 
    }, 
    "string": "Hello World" 
} 

""" 

print(json.dumps(json.loads(invalid_json), indent=4 * ' ')) 

, 제거하여 문자열 numbers 배열 오차를 유도. documentation에 실패하면 pos과 관련하여 실패한 행 번호를 알려 주어야합니다. 줄 번호는 항상 데이터가 저장된 파일에 따라 달라집니다.

오류 MSG

simplejson.scanner.JSONDecodeError: Expecting ',' delimiter or ']': line 6 column 5 (char 35) 

숫자 배열이 후 더 ,이 없기 때문에, 그것은 파일의 상단에 0에서 시작하는 라인을 계산 시작합니다. 이 경우에는 6 (위의 붙여 넣은 코드에서 새 행과 import 문을 제외했습니다.)

전체 파일 대신 문자열에 상대적으로 줄 번호를 가져 오는 방법이 있습니까?

+0

코드에서 'simplejson'이 아닌 ['json'] (https://docs.python.org/3/library/json.html)을 사용하고 있습니다. –

+0

@AzatIbrakov 실제로 수입 문이 맨 위에 있습니다. 'json으로 수입 simeplejson' – kiran6

답변

0

줄 번호는 파일이 아닌 문자열과 관련이 있습니다. 소스 코드에서 오류 보고서의 위치를 ​​변경하지 않는 스팅 정의 앞에 빈 행을 추가하여 검사 할 수 있습니다.

보고 된 행이 6이 아닌 5라는 사실은 파서가 작동하는 방식은 오류가 발견 된 지점에서 오류를보고하고 오류가 수정되어야하는 곳이 아니라 오류가 있다는 것이기 때문입니다. (그런데 json 문자열의 첫 번째 줄은 길이가 0 인 줄로 """"을 줄 끝으로 이동합니다)

예를 들어 다음 코드에서 원래 코드와 비슷한 구문 분석기는 그것은 단지 일반 구문 분석 오류에 라인 6.

valid_json = """ 
{ 
    "numbers": [ 
    1, 
    2 
    ,3 
    ] 
} 

""" 

에 문제가 있음을 알고 원래 코드 파서에서 같은 방법으로 라인 (6)에 도달 할 때까지, 오류의 수정은 종종 몇입니다 유효 오류가 표시된 위치 앞에 줄이 있습니다. 작성된 라인은 정확한 위치보다 힌트 이상으로 고려되어야합니다.