누락 된 구분 문자를 식별하고 JSON
파일 내의 해당 위치에 삽입 할 수있는 프로그램을 만들려고 합니다. 예를 들어, 내 JSON
모습이 다음과 같다고 가정 해 봅시다 .
{
"array": [{
"id": "123",
"info": {
"name": "something"
}
"address": {
"street": "Dreamland"
}
}]
}
이것은 JSON
어떤 존재이기 때문에 유효하지 않습니다 ,
사이 }
와 "address"
.
여기에 문제가 있습니다.를 사용하려고 json.loads(my_json.read())
하면 JSONDecodeError
예외 가 발생 하여 어떤 문자가 누락되었는지, 어떤 문자 위치에 있어야하는지 다음과 같이 알려줍니다.
json.decoder.JSONDecodeError: Expecting ',' delimiter: line 7 column 9 (char 116)
나는 이미 my_json.seek(116)
전혀 작동하지 않는 인쇄 를 시도했지만 단지 숫자 116을 인쇄했습니다.
그래서 내 질문은 : 실제로 예외 오류 메시지를 사용하여 JSON
어떤 구분 문자가 누락되고 어떤 위치에 있어야하는지 보여주기 때문에 수정하는 것이 가능합니까, 아니면 가능한 모든 구분 기호를 추적하기 위해 스택 데이터 구조를 사용해야합니까? 누락 된 것을 삽입 하시겠습니까? 아니면 더 좋은 방법이 있습니까?
내가 좋아하는 여기에 다른 질문을 본 적이 이것 과 이것 하지만 첫 번째 내 경우가 아니라 인코딩 문제이고, 두 번째는 매우 구체적인 경우에이다.
이 중 일부가 멍청 해 보이면 죄송합니다. 아직 Python으로 코딩하는 방법을 배우고 있습니다.
시간 내 줘서 고마워 :)
구분 기호 ','
가 누락 된 위치 ( pos
예외 객체 의 속성으로 저장 됨) 에서 문자열을 슬라이스하고 다음 과 결합 할 수 있습니다 ','
.
import json
s = '[{"a":1}{"b":2}{"c":3}]'
while True:
try:
data = json.loads(s)
break
except json.decoder.JSONDecodeError as e:
if not e.args[0].startswith("Expecting ',' delimiter:"):
raise
s = ','.join((s[:e.pos], s[e.pos:]))
print(s)
print(data)
결과는 다음과 같습니다.
[{"a":1},{"b":2},{"c":3}]
[{'a': 1}, {'b': 2}, {'c': 3}]
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다