2012-08-15 91 views
1

我有這樣的JSON Python字符串:如何將字符串轉換使用變音符號回JSON

linklist = str(' 
{ 
    "Download":{ 
    "Test": "http://www.test.org", 
    u"K\xf6ter": "http://www.koeter.de"} 
}' 
) 

我想用:

myJson= json.loads(linklist) 

但我得到一個問題,因爲有一個德國元音在JSON字符串中

對此字符串進行編碼/解碼的最佳方式是什麼,以便字符串被轉換爲有效的JSON對象,並使用simplejson

嗨這裏是我想在我的代碼做:

JSON:links.json

{ 
"Download":{ 
    "Link1ä":"http://www.link1.de/test", 
    "Link2ö":"http://www.link2.de/test/cool", 
    "Link3ü":"http://www.link3.de/test/foo/bar", 
    "Link4ü":{"Link5ü":"http://www.link5.de/test"} 
} 
} 

的Python文件:

linksFile = open('links.json', 'r') 
linksList = json.load(linksFile) 

在這種linksList我想搜索測試並將其替換爲ie myTest

c一個I替換此JSON-對象linksList所有字符串 - >測試 - > MYTEST

非常感謝您的幫助。我嘗試以下,使JSON對象上更換,沒有問題,變音符號:

linksFile = open('links.json', 'r') 
linksList = json.load(linksFile) 
dump = json.dumps(linksList) 
linksList = json.loads(dump.replace('toReplace', 'replacement')) 
+0

你是怎麼得到這個字符串? – delnan 2012-08-15 22:02:56

+0

@delnan是他的字符串不太正確,但是(utf-8 json)>'json.loads'>'json.dumps'和(包含UTF-8 str的python列表)>'json.dumps'>'json。負載「不是,至少從控制檯輸出看,是對稱操作。至少對於我來說,谷歌的盡職調查也不會給出解釋。這兩個操作似乎都給你一個「unicode」/ UTF-16表示,而不是UTF-8。使用明確的'encoding ='utf-8''和'dumps'和'loads'保持真實。 – 2012-08-15 23:16:13

回答

1

如果該字符串是Köter,那麼你的問題是在編碼,而不是JSON(德)序列化。看起來你正在使用cp1250。

嘗試指定的編碼明確(默認的是UTF-8這顯然不是你的情況下):

myJson = json.loads(linklist, 'cp1250') 
+0

沒有什麼真正暗示他在這裏使用cp1250。他的JSON字符串中的關鍵字帶有一個'u'前綴,表明他從哪裏獲取該字符串的位置已經正確解碼,或者最初是從哪個位置獲取的,或者是源代碼爲「unicode」還是「unicode」。如果沒有更多的信息(錯誤/調用堆棧或源代碼的原始代碼),則無法確定源編碼是什麼,更不用說編碼導致問題了。 – 2012-08-15 23:36:17

+0

的確,我沒有注意到你的前綴。我從lennykey表示它是變音符的事實推斷出代碼頁,而'\ xf6'代表cp1250中的**ö**。 – 2012-08-15 23:39:33

+0

代表'unicode'/utf-16中的相同內容。 :) – 2012-08-15 23:40:34