JSON格式資料的處理

來源:互聯網
上載者:User

標籤:list   rank   lan   大小   混合   部落格   通過   ascii   byte   

源檔案儲存體格式 {"coi_id":"dhfjhjhfjdhfjdhjs", "city_name":"深圳市", "coi_name":"海岸城", "img":"http://......jpg", "list":[{.......}], "hot":3.5},源檔案JSON形式按行儲存。

目標:刪除“list”屬性及相關值,將相同城市名的的購物中心劃在一起,最後儲存為 {"city_name":"深圳市", "list":[{"coi_is":"dfgffgf", "coi_name":"海岸城", "img":"http://...jpg", "hot":3.5}, {...}, ...] }形式,並對每個城市下的購物中心的熱度hot按值大小排序。

實現:

 1 import json 2 import codecs 3  4 fileread=open("test.data") 5 filenew=open("aois.txt",‘w+‘) 6  7 city_aois={} 8 city_put={} 9 10 for line in fileread:11     #print line12     json_obj=json.loads(line)13     del json_obj["list"]14     #print json_obj15     if json_obj[‘city_name‘] not in city_aois:16         city_aois[json_obj[‘city_name‘]]=[]17         city_aois[json_obj[‘city_name‘]].append(json_obj)18     else:19         city_aois[json_obj[‘city_name‘]].append(json_obj)20 21 22 for poi in city_aois:23     city_aois[poi].sort(key=lambda x: x["hot"],reverse=True)24     #item=json.dumps(city_aois[poi],ensure_ascii=False)25     #strs = ‘{"city_name":"‘+poi.encode("UTF-8")+‘","list":‘+item.encode("UTF-8")+‘}‘26     #print strs27     tmp={}28     tmp[‘city_name‘]=poi29     tmp[‘list‘]=city_aois[poi]30     strs=json.dumps(tmp,ensure_ascii=False).encode("UTF-8")31     filenew.write(strs+‘\r\n‘)32 33 fileread.close()34 filenew.close()

踩過的坑:

1. 對python不熟,其實“JSON”並不是java中使用的是一個對象,僅僅是JSON格式的字串,通過json.loads()是將讀取檔案的字串轉換為“字典”形式,類型為 “dict”,然後就可以對字典進行相應的操作了,譬如根據key獲得value這樣的形式。

2. python將JSON格式的字串轉為字典時,此時是unicode編碼,一系列操作完畢後,需要通過json.dumps()將字典轉換為字串,這時候會出現各種編碼問題,譬如簡單dumps後中文顯示的是unicode形式,如果字典裡有中文,則需要加上

json.dumps(tmp,ensure_ascii=False)

列印顯示時,還需調用encode將編碼轉換為UTF-8形式。

3. 會出現錯誤“UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe6 in position 1: ordinal not in range(128)”

 是因為“key和value不能以混合一般字元串和unicode字串的形式存在”.

 此外,

item=json.dumps(city_aois[poi],ensure_ascii=False)tmp[‘list‘]=item.encode("UTF-8")strs=json.dumps(tmp,ensure_ascii=False).encode("UTF-8")
print strs

如上做法就是先將 dict轉換為字串複製給了tmp的“list”, 然後dumps時就不會以字典的規矩館list中的內容,一律以字串對待,則會出現:

所以在dumps前,list中的內容也要是字典形式。最後統一dumps。 

注意使用過程中,編碼一致性。

 

參考了以下部落格內容:

json.dumps使用的坑以及字元編碼:

http://www.cnblogs.com/stubborn412/p/3818423.html

線上查看 不同編碼內容對應的漢字:

http://tool.oschina.net/encode?type=3

python字典與檔案讀寫:

http://blog.csdn.net/frankchen0130/article/details/53136681

json.dumps編碼 utf8與unicode:

https://stackoverflow.com/questions/18337407/saving-utf-8-texts-in-json-dumps-as-utf8-not-as-u-escape-sequence

 

JSON格式資料的處理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.