2012-07-19 61 views
1

因此,我正在使用celery任務隊列發出HTTP請求的django項目。json.loads()失敗

在我芹菜任務的代碼,我有:

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可以解碼的字符串,因爲它不會失敗2行以上,但是當我通過引用傳遞字符串時,它似乎窒息。

任何人都可以爲我闡明這一點嗎?

回答

0

什麼是「test.headers」,你的代碼片段沒有說明這一點。如果test.headers被分配給第一個json.loads調用的結果,那麼第二個將會明顯失敗,因爲你沒有提供一個字符串。第二個電話應該是json.dumps(test.headers)

+0

'print test.headers'的輸出顯示在芹菜命令行中的第二個代碼片段的第一行: '[2012-07-19 17:02:38,536:WARNING/PoolWorker-4] '{「content-type」:「application/json」}' ' – pdeuchler 2012-07-19 22:20:07

+0

'test.headers'是否包含文本'[2012-07-19 17:02:38,536:WARNING/Poolworder-4]'?因爲如果是這樣,JSON解碼器將不會很開心。 – steveha 2012-07-20 00:11:19

1

test.headers可能是一個字典。如果你打印它,它會輸出一些看起來像JSON的東西,但test.headers可能根本不是JSON,解碼它會導致JSON窒息。

+0

我已經運行'print type(test.headers)'並得到了'' – pdeuchler 2012-07-19 22:26:31

+2

好吧。因此,請明確檢查test.headers是否等於'{「content-type」:「application/json」}'。如果日誌告訴你真相,那應該是。然後如果是這樣,這是一個奇怪的錯誤,根據它存儲的位置可以加載或不加載相同的字符串。如果不是,我敢打賭它不是,在test.headers版本中必須隱藏一些gremlin - 打印時不可見。不知道:一旦我得到一個看起來像一個空間的0xA0字符(我失去了一個晚上跟蹤它的一個晚上!),並且已知存在更奇怪的事物。 – LSerni 2012-07-19 22:32:45

+0

對於gremlins +1。如果需要,比較'test.headers'中的x的ord(x)和'{「content-type」:「application/json」}「中的x的ord(x)。 – 2012-07-19 23:27:42