2012-07-19 5 views
1

그래서 저는 셀 요청 작업 대기열을 사용하여 HTTP 요청을하는 django 프로젝트를 만들고 있습니다. 내 셀러리 태스크 코드에서json.loads() failed

내가 가진 : 결과

json.loads('{"content-type": "application/json"}') 
print test.headers 
json.loads(test.headers) 

:

[2012-07-19 17:02:38,536: WARNING/PoolWorker-4] '{"content-type": "application/json"}' 
[2012-07-19 17:02:38,569: ERROR/MainProcess] Task core.tasks.test_run[f304bcdd-72b3-4dd5-9abb-927dc29e7f65] raised exception: ValueError('No JSON object could be decoded',) 
Traceback (most recent call last): 
    File "/usr/local/bin/lib/python2.7/site-packages/celery/task/trace.py", line 212, in trace_task 
    R = retval = fun(*args, **kwargs)  
    File "/opt/ironman_deploy/Ironman/core/tasks.py", line 18, in test_run 
    json.loads(test.headers) 
    File "/usr/local/bin/lib/python2.7/json/__init__.py", line 326, in loads 
    return _default_decoder.decode(s) 
    File "/usr/local/bin/lib/python2.7/json/decoder.py", line 366, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "/usr/local/bin/lib/python2.7/json/decoder.py", line 384, in raw_decode 
    raise ValueError("No JSON object could be decoded") 
No JSON object could be decoded: No JSON object could be decoded 

내가 무슨 일인지 말 그대로 아무 생각이 ... 명확하게 JSON은 문자열을 디코딩 할 수 그것 때문에 위의 두 줄은 실패하지 않지만 참고로 문자열을 전달하면 초크가 나는 것처럼 보입니다.

누구든지 나를 위해이 부분을 밝힐 수 있습니까?

답변

0

"test.headers"란 무엇인가요? 스 니펫이이를 나타내지 않습니다. test.headers에 첫 번째 json.loads 호출의 결과가 할당되면 두 번째 문자열에 문자열을 제공하지 않아 obviosuly 실패합니다. 두 번째 호출은 json.dumps (test.headers) 여야합니다.

+0

'print test.headers'의 출력은 셀러리 명령 행의 두 번째 코드 스 니펫의 첫 번째 줄에 표시됩니다. '[2012-07-19 17 : 02 : 38,536 : WARNING/PoolWorker-4] '{ "content-type": "application/json"}' ' – pdeuchler

+0

'test.headers'는'[2012-07-19 17 : 02 : 38,536 : WARNING/Poolworder-4]'텍스트를 포함합니까? 그렇다면 JSON 디코더가 만족스럽지 않을 것입니다. – steveha

1

test.headers는 dict 일 수 있습니다. 인쇄하면 JSON과 비슷한 모양으로 출력되지만 test.headers는 JSON이 아닐 수도 있으며 JSON을 디코딩하면 JSON이 질식 할 수 있습니다.

+0

'print type (test.headers)'를 실행했고' '을 받았습니다. – pdeuchler

+2

좋습니다. 따라서 test.headers가 '{ "content-type": "application/json"}'과 같은지 여부를 명시 적으로 확인하십시오. 통나무가 당신에게 진실을 말하면, 그것은 있어야합니다. 그리고 만약 그렇다면, 그것은 저장되어있는 곳에 따라 같은 문자열이 적재 될 수도 있고 그렇지 않을 수도있는 이상한 버그입니다. 그것이 아니라면, 나는 그렇지 않다는 것을 확신하고 있습니다. 테스트에서 숨겨진 약간의 gremlin이 있어야합니다. 헤더 버전 - 인쇄 할 때 보이지 않는 것입니다. Dunno : 한 번 0xA0 문자가 공간처럼 보이면 (그 하나를 추적하는 저녁을 잃어 버렸습니다!), 더 이상한 것이 존재하는 것으로 알려져 있습니다. – LSerni

+0

gremlins +1. 필요한 경우 '{ "content-type": "application/json"}''에서 x에 대해 'ord (x) for test.headers'에서'ord (x)를 비교하십시오. –