2012-06-14 35 views
0

我讀過simplejson文檔,不明白爲什麼它有時會返回一個帶有單引號(php無法理解)的json對象,而其他時間會返回轉義的雙引號序列(也是沒有在PHP中識別)。我可能可以對輸出字符串進行正則表達式作爲bandaid,但我更願意理解問題的根源。不一致simplejson轉換報價

例子:

INPUT:(Python中的起始數據)

print stories 

{ '文':「HIV/AIDS有一天,\ r \ n然後我們送她回家,我們呼籲會議並告訴村民我們應該照顧她,並在她離開之前給她她需要的一切照顧。','id':1215L}

而作爲一個健全檢查 - json對象看起來很正常之前cherrypy得到我的持有T:

print simplejson.dumps(stories) 

[{ 「文」: 「青年青年的能力...亞達內容十分重要...」, 「ID」:12828},{ 「文」:「女...內容十分重要亞達......「, 」ID「:12828}]

... 
import simplejson 
return simplejson.dumps(stories) 

[一些不起眼的奇蹟發生與CherryPy的...] 下面是經過JSON到瀏覽器中的CherryPy部分:

@cherrypy.expose 
def browse_stories(self): 
    stories = test_org_match.browse_org_story_matches() 
    cherrypy.response.headers['Content-Type'] = 'application/json' 
    return json.dumps(stories) 

輸出(我在瀏覽器中通過cherrypy調用此對象時看到的內容):

「[{\」text \「:\」POVERTY我們決定偷菜。我們無能爲力。我們在沒有食物的情況下逗留了兩天,第三天我們無法跟上。我們不得不吃東西,否則我們會死。我們開始慢慢地朝香巴那邊走去,儘可能多地回到家中煮熟,吃了,我們感覺更好。「,\」id \「:33109},{\」text \「:\」Boda Bado他們只是在運輸的基礎上,人們可以使用bada-boda運輸來節省時間。\ r \ n它的接力幫助村裏的農村人民使用摩托車將自己運送到另一個耳朵。 \「 \‘ID \’:35931}]」

(兩者之間的文本是不同的,但這種情況與隨機文本片段很拉中的任何一個)

注:我相信其他的情況下simplejson返回一個單引號的對象,因爲我傳遞了str(字典)而不是實際的字典。當然,當你提供單引號的json時,php會中斷。但是,「免費」逃跑讓我感到困惑 - 而且我認爲這是在cherrypy內部發生的。

回答

2

我想通了。我的代碼使用json.dumps(),然後再次使用json.dumps - 所以額外的轉義字符是json將其視爲字符串而不是字典對象。

+0

+1回來給出答案! – DSM