2016-09-22 4 views
0

나는 팰콘 프레임 워크를 사용하는 Python 3.4로 작성된 웹 서비스를 가지고 있습니다. 한 가지 특별한 방법은 json 값의 게시물을 허용합니다. 내 코드 :Python json.loads()가 json 문자열을 구문 분석하지 못했습니다.

try: 
     raw_json = req.stream.read() 
    except Exception as ex: 
     raise falcon.HTTPError(falcon.HTTP_400, 'Error', ex.message) 
    try: 
     result_json = json.loads(raw_json.decode('utf-8')) 
    except ValueError: 
     raise falcon.HTTPError(falcon.HTTP_400, 
      'Malformed JSON', 'Could not decode the request body. The JSON was incorrect.') 

    clientIp = result_json['c'] 
    wpIp = result_json['w'] 
    lan = result_json['l'] 
    table = int(result_json['t']) 

이 코드 9 개월 전 잘 작동하지만, 현재 오류가 발생했다 ". 목록 지수는 str에하지, 정수 또는 조각이어야합니다" 파이썬이나 팔콘 패키지 업데이트 후에 파산되었을 가능성이 있습니다.

raw_json.decode ('utf-8')의 출력은 [{ "w": "10.191.0.2", "c": "10.191.0.3", "l": "255.255. 255.0 ","t ":"4 "}]. json.loads()가 내 문제의 근원이라고 생각합니다. len (result_json)이 예상 한대로 1을 반환합니다. 4 json.loads()가 올바르게 구문 분석하는 데 필요한 추가 매개 변수가 있습니까? 아니면 완전히 다른 것을 놓치고 있습니까?

감사 그레그 (파이썬 놈)

답변

0

반환 된 결과 [{"w": "10.191.0.2", "c": "10.191.0.3", "l": "255.255.255.0", "t": "4"}] 파이썬 목록으로 파싱 JSON 배열이다. 따라서

result_json['c'] 

이 오류를 생성합니다. 어쩌면 API에 변경이 있었고 이전에 json 객체를 반환 한 배열을 반환합니다.

이 작동합니다 : 속임수를 썼는지

clientIp = result_json[0]['c'] 
... 
+0

합니다. 감사. 나는 그것이 단순한 것이라고 생각했다. –

+0

어떤 경우에는 둘 이상의 결과가 있다는 것을 의미 할 수도 있으므로'result_json'을 반복하고'dict' 각각에서'c '값을 얻고 싶을 수도 있습니다. 인덱스 0에서 색인 만하면 다른 중요한 데이터를 놓친 지 알 수 없습니다. – ShadowRanger

+0

들어오는 요청을 제어하기는하지만 좋은 지적이지만 단일 항목 일뿐입니다. –

관련 문제