, 이것은 두 가지 이유에서 유효하지 JSON입니다.
가능하면 올바른 JSON을 생성하기 위해 이것을 생성하는 서버 코드를 수정하는 것이 가장 좋습니다. 아마도이 코드는 문자열을 수동으로 붙여 넣어 "JSON"을 생성하고 있을까요? 그렇다면 대신 json.dumps()
을 사용하도록 변경할 수 있습니다. 그러면 유효한 JSON이 제공됩니다.
"JSON"텍스트를 사전 처리하여 키 이름을 따옴표로 묶고 후행 쉼표를 제거 할 수 있습니다. 이것은 조금 깨지기 쉬운 될 수 있지만, 비슷한 남아 입력 데이터의 형식을 알고있는 경우에, 그것을 할 수있는 하나 개의 방법 :
import json, re
badJson = '''
{
token: "testauthtoken",
content: "record",
formId: "maintenance_ct",
formVersion: "",
}
'''
print('badJson:')
print(badJson)
goodJson = re.sub(r'\n\s*(\S+)\s*:', r'\n"\1":', badJson)
goodJson = re.sub(r',\s*}', r'\n}', goodJson)
print('goodJson:')
print(goodJson)
goodData = json.loads(goodJson)
print('goodData:')
print(goodData)
이 지문 :
badJson:
{
token: "testauthtoken",
content: "record",
formId: "maintenance_ct",
formVersion: "",
}
goodJson:
{
"token": "testauthtoken",
"content": "record",
"formId": "maintenance_ct",
"formVersion": ""
}
goodData:
{'formId': 'maintenance_ct', 'content': 'record', 'token': 'testauthtoken', 'formVersion': ''}
내가 처음 쓴 대답 나는 질문을 오해하고 파이썬 대신 자바 스크립트 솔루션을 제공했다. 여기에 남겨두면 유용 할 것입니다.
입력 텍스트가 유효한 JSON이 아니지만 올바른 JavaScript 객체 리터럴입니다. 따라서 이것을 그대로 취급하고 eval()
을 사용하여 파싱 할 수 있습니다. 실제로 이것은 jQuery와 같은 라이브러리가 JSON.parse()
을 지원하지 않는 구식 브라우저에서 JSON을 구문 분석하는 방법입니다.
주의 : 당신은이 데이터 문자열의 출처를 신뢰할 수있는 것이 좋습니다. 실행 코드로 취급하고 있기 때문입니다!
// Set up a string like your input data string.
// All on one line here so we can use a string constant for testing,
// but your multiline data string will work the same.
var dataString = '{ token: "testauthtoken", content: "record", formId: "maintenance_ct", formVersion: "", }'
// Now use eval() to convert it to a JavaScript object.
// We wrap the string in parentheses so it will parse as an expression.
var data = eval('(' + dataString + ')');
// Finally, we can access the values.
console.log('token: ', data.token);
console.log('content: ', data.content);
console.log('formId: ', data.formId);
console.log('formVersion: ', data.formVersion);
어떻게 그들이 문자열이 아닌합니까? 키를 반복하고 각 키의 유형을 '인쇄'하면 어떻게됩니까? – DeepSpace
JSON 형식의 형식을 문자열로 표시하면 JSON 파일 전체가 단일 문자열입니다. –
JSON은 키 이름 만 문자열로 허용합니다. https://stackoverflow.com/questions/8758715/using-number-as-index-json ('json.loads()'로 스 니펫을로드하면 예외가 발생합니다. – Levi