我从Python获取了一些API数据,我正在尝试将其打印到文件中。我的理解是indent
参数可以让你打印出来。这是我的代码:
import urllib2, json
APIKEY_VALUE = "APIKEY"
APIKEY = "?hapikey=" + APIKEY_VALUE
HS_API_URL = "http://api.hubapi.com"
def getInfo():
xulr = "/engagements/v1/engagements/paged"
url = HS_API_URL + xulr + APIKEY + params
response = urllib2.urlopen(url).read()
with open("hubdataJS.json", "w") as outfile:
json.dump(response, outfile, sort_keys=True, indent=4, ensure_ascii=False)
getInfo()
当我在Sublime文本中打开它时,我期望hubdataJS.json
的样子是一些具有如下格式的JSON:
{
a: some data
b: [
some list of data,
more data
]
c: some other data
}
我得到的是一行中的所有数据,引号(我认为dumps
用于输出为字符串),有很多\
s,\r
s,和\n
s。
对我做错了什么感到困惑。
答案 0 :(得分:4)
在您的代码中,response
是一个字节字符串,包含以json格式序列化的数据。当您执行json.dump
时,您将字符串序列化为json。你最终得到一个包含字符串的json格式文件,并且在该字符串中你有另一个json数据,所以json里面有json。
要解决这个问题,你需要解码(反序列化)从互联网上获取的字节串数据,然后再将其重新编码为json以写入文件。
response = json.load(urllib2.urlopen(url))
将序列化数据从Web转换为真正的python对象。