如果您收到了编码的响应,您可以使用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