다음을 JSON으로 포맷하려고합니다 (Python에서).
{
"sessionTimeout":"3600.0",
"serverVersion":"LK_LK-NL-7_188-176-419",
"worldDawn":"2018-10-09 06:00:00 Etc/GMT",
"Data":{
"Player":[
{
"nick":"Player11226400",
"points":"44",
"alliancePermission":"0",
"isOnVacation":"false",
"id":"5048",
"rank":"561",
"entityName":"Player",
},
{
"nick":"Player11230580",
"points":"15",
"alliancePermission":"0",
"isOnVacation":"false",
"id":"5215",
"rank":"2081",
"entityName":"Player",
},
{
"nick":"Player11291581",
"points":"15",
"alliancePermission":"0",
"isOnVacation":"false",
"id":"5942",
"rank":"2081",
"entityName":"Player",
}
]
}
}
물론 모든 JSON 유효성 검사기는 각} 앞의 끝에 ","때문에 유효한 JSON이 아니라고 알려주므로 해당 쉼표를 제거하고 싶습니다. .replace ( ' "Player", ",'"Player " ')를 사용하여 제거하려고 시도했지만이를 좋은 솔루션으로 간주하지 않습니다. 예를 들어 Alliance 또는 Habitat 문자열에서 뒤에", "가 있기 때문입니다. ( "해비타트"및 "동맹")
누구 든지이 문제에 대한 더 나은 해결책을 찾는 데 도움을 줄 수 있습니까?
두 가지 솔루션 :
먼저 json 파일에 boolean 이 null
없거나 false/true
boolean이 있으면 ast.literal_eval
쉼표를 처리 할 수 있는 입력을 읽는 것이 좋으며 필요한 경우 dict을 json으로 덤프합니다.
d = ast.literal_eval(txt)
print(json.dumps(d,indent=4))
할 수 없다면 정규 표현식을 사용하여 다음 줄이 공백 + 닫는 중괄호 / 대괄호로 시작하면 줄 바꿈 전에 발생하는 쉼표를 제거 할 수 있습니다.
import re
print(json.loads(re.sub(",(\n\s+[\}\]])",r"\1",txt)))
다음은 입력의 축소 버전이있는 2 가지 접근 방식을 포함하는 전체 스 니펫입니다.
import ast,json
txt = """{
"sessionTimeout":"3600.0",
"serverVersion":"LK_LK-NL-7_188-176-419",
"worldDawn":"2018-10-09 06:00:00 Etc/GMT",
"Data":{
"Player":[
{
"nick":"Player11226400",
"rank":"561",
"entityName":"Player",
},
{
"nick":"Player11230580",
"rank":"2081",
"entityName":"Player",
},
{
"nick":"Player11291581",
"rank":"2081",
"entityName":"Player",
}
]
}
}"""
print("ast literal eval:")
d = ast.literal_eval(txt)
print(json.dumps(d,indent=4))
import re
print("regex:")
d = json.loads(re.sub(",(\n\s+[\}\]])",r"\1",txt))
print(json.dumps(d,indent=4))
두 방법 모두 입력 파일을 성공적으로 구문 분석합니다. 첫 번째 방법은 널 포인터 및 부울이없는 한 완벽하게 작동하며, 두 번째 방법은 모호한 형식 지정 경우 실패 할 수 있습니다. 운이 좋지 않은 경우 사이에 무언가를 해킹 할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다