Python相当于从API到文件打印JSON

时间:2018-06-13 18:06:15

标签: python json

我从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。

对我做错了什么感到困惑。

1 个答案:

答案 0 :(得分:4)

在您的代码中,response是一个字节字符串,包含以json格式序列化的数据。当您执行json.dump时,您将字符串序列化为json。你最终得到一个包含字符串的json格式文件,并且在该字符串中你有另一个json数据,所以json里面有json。

要解决这个问题,你需要解码(反序列化)从互联网上获取的字节串数据,然后再将其重新编码为json以写入文件。

response = json.load(urllib2.urlopen(url))

将序列化数据从Web转换为真正的python对象。