如果您收到了編碼的響應,您可以使用urllib.unquote
的轉義字符替換成自己的'實際'表示。一旦你這樣做了,你可以使用json
模塊作爲Python對象加載字符串,然後使用csv
模塊根據響應創建CSV。您迴應的結構將決定如何將設置你的目的,但希望這將讓你在正確的道路上:
In [1]: import csv
In [2]: import json
In [3]: import urllib
In [4]: json_resp = urllib.quote('[{"name": "John Doe", "age": 35}, {"name": "Jane Doe", "age": 33}]')
In [5]: json_resp # What I believe your response looks like
Out[5]: '%5B%7B%22name%22%3A%20%22John%20Doe%22%2C%20%22age%22%3A%2035%7D%2C%20%7B%22name%22%3A%20%22Jane%20Doe%22%2C%20%22age%22%3A%2033%7D%5D'
In [6]: resp = urllib.unquote(json_resp) #'Unquote' the response
In [7]: resp
Out[7]: '[{"name": "John Doe", "age": 35}, {"name": "Jane Doe", "age": 33}]'
In [8]: content = json.loads(resp) # Turn the resp into a Python object
In [9]: fieldnames = ('name', 'age') # Specify the order in which to write fields
In [10]: with open('mycsv.csv', 'wb') as f:
....: writer = csv.DictWriter(f, fieldnames)
....: writer.writeheader() # Python 2.7+
....: for item in content:
....: writer.writerow(item)
....:
....:
這會寫一個CSV,看起來像:
name,age
John Doe,35
Jane Doe,33
謝謝你的迴應,我已經提出了它,因爲這是一個非常好的答案,但我應該指定我收到的'內容',對我來說看起來像json,我猶豫發佈確切的回覆,因爲它是發票I正在檢索。但它看起來像你在第7行,另外兩個維度,雖然如果我嘗試將它傳遞到json.loads()函數它返回一個ValueError:沒有Json對象...這似乎很奇怪,我已經嘗試了所有其他解決方案,我可以在網絡上找到 – jbaldwin
@jbaldwin呃,這讓它變得簡單一點:)然後,檢查一下是響應本身 - 它是否顯示爲有效格式,意思是雙倍 - 用於包含輔助對象的引號,都與關閉的'}匹配,所有列表正確關閉,沒有額外的逗號等。您可以使用基本的有效JSON字符串測試當前技術(如上面的例子) - 如果它起作用,這將是響應本身的問題。 – RocketDonkey
我在某個論壇上使用了json'checker'鏈接到某個論壇的人,http://jsonlint.com/當我將代碼放在這裏時,它說:「解析第45行的錯誤: ...」v「:(2010, -----------------------^ 期待'STRING','NUMBER','NULL','TRUE','FALSE',' {''''''但是我對java的瞭解不多,當我以不同的方式來看待這個問題時,有時我會得到newDate(2010 ...然後當我查看它時,它說它是用於數據格式,那麼數據的格式化仍然有效? – jbaldwin