擅长:python、mysql、java
<p>正如其中一个答案中提到的,您可能希望使用<code>response.json()</code>而不是<code>response.text</code>,这样您就可以得到一个实际的JSON字典</p>
<p>但是,另一个问题是<code>getweatherdata()</code>返回单个字典,因此当您执行<code>avro_objects = (to_rec_avro_destructive(rec) for rec in getweatherdata())</code>操作时,您正在迭代该字典中的键。相反,您应该执行<code>avro_objects = [to_rec_avro_destructive(getweatherdata())]</code></p>
<p>我相信这个代码应该适用于您:</p>
<pre><code>from fastavro import writer, reader, schema
from rec_avro import to_rec_avro_destructive, from_rec_avro_destructive, rec_avro_schema
def getweatherdata():
url = 'https://api.openweathermap.org/data/2.5/onecall?lat=33.441792&lon=-94.037689&exclude=hourly,daily&appid=' + apikey
response = requests.get(url)
data = response.json()
return data
def turntoavro():
avro_objects = [to_rec_avro_destructive(getweatherdata())]
with open('json_in_avro.avro', 'wb') as f_out:
writer(f_out, schema.parse_schema(rec_avro_schema()), avro_objects)
turntoavro()
</code></pre>