我需要从天气API中获取一些数据,提取某些信息并将其发送到std。输出(在我的情况下,这是控制台/终端;我正在使用python API脚本,还没有网站/应用程序显示提取的数据)。
来自API提供程序的示例Python代码(易于理解和有效):
import urllib2
import json
API_KEY='mysuperawesomekey'
f = urllib2.urlopen('http://api.wunderground.com/api/' + API_KEY + '/geolookup/conditions/q/IA/Cedar_Rapids.json')
json_string = f.read()
parsed_json = json.loads(json_string)
location = parsed_json['location']['city']
temp_f = parsed_json['current_observation']['temp_f']
print "Current temperature in %s is: %s" % (location, temp_f)
f.close()
由于我处于免费计划中,我不想用尽我的API请求,而是获取JSON数据,将其保存到文件中并使用其他脚本进行练习。我在StackOverflow找到了几个解决方案,但似乎都没有完全正常工作(文件的格式很好):
尝试1.保存提取的数据,添加。到了原点。上面的代码:
import io
import codecs
with open('data.json', 'w') as outfile:
json.dump(json_string, outfile, indent=4, sort_keys=True, separators=(",", ':'))
尝试2:
with codecs.open('data.json', 'w', 'utf8') as jasonfile:
jasonfile.write(json.dumps(parsed_json, sort_keys = True, ensure_ascii=False))
我的两次尝试都工作(“有点”),因为我得到了一个 .json 文件。但是,在我的编辑器(Atom)中检查它时,我看到了这一点(前几条软断线):
输出:
"\n{\n \"response\": {\n \"version\":\"0.1\",\n\"termsofService\":\"http://www.wunderground.com/weather/api/d/terms.html\",\n \"features\": {\n \"geolookup\": 1\n ,\n \"conditions\": 1\n }\n\t}\n\t\t,\t\"location\": {\n\t\t\"type\":\"CITY\",\n\t\t\"country\":\"US\",\n\t\t\"country_iso3166\":\"US\",\n\t\t\"country_name\":\"USA\",\n\t\t\"state\":\"IA\",\n\t\t\"city\":\"Cedar Rapids\",\n\t\t\"tz_short\":\"CDT\",\n\t\t\"tz_long\":\"America/Chicago\",\n\t\t\"lat\":\"41.97171021\",\n\t\t\"lon\":\"-91.65871429\",\n\t\t\"zip\":\...
全部在一行上,显示换行符和标签。我有几个问题:
json_string = f.read()
似乎“模仿”使用“真正的”内部文件对象,这是正确的吗?非常感谢!
答案 0 :(得分:1)
似乎这是一个非常简单的解决方案。在我的原始代码中,我将“未解析”变量保存到文件中:
import urllib2
import json
API_KEY='key'
f = urllib2.urlopen('http://api.wunderground.com/api/' + API_KEY + '/geolookup/conditions/q/IA/Cedar_Rapids.json')
json_string = f.read()
# THIS one is correct!
parsed_json = json.loads(json_string)
with open('data.json', 'w') as outfile:
json.dump(parsed_json, outfile, indent=4, sort_keys=True, separators=(",", ':'))
当然,这导致了一行中包含JSON数据的文件。我应该做的是保存解析的变量:
<a href="#" onclick="OpenPopup(this)" id='<%# Eval("YolcuId") %>'>Sil</a>