![](/img/trans.png)
[英]How to convert a large json response of a web service call into CSV in Python?
[英]Convert large JSON to CSV — Python
我正在嘗試將.json文件轉換為.csv,以便可以在R中執行分析。我正在遵循其他人建議的步驟,但是仍然遇到問題(可能是由於json文件的大小)。 首先,我從網上提取網址:
import urllib
#first open html as .json
response = urllib.request.urlopen("http://trends.vera.org/data/county/1003/")
input = response.read()
print(input)
我從鏈接的問題中得到下面的此函數以將json文件展平。
#function to flatten .json file
def flattenjson( b, delim ):
val = {}
for i in b.keys():
if isinstance( b[i], dict ):
get = flattenjson( b[i], delim )
for j in get.keys():
val[ i + delim + j ] = get[j]
else:
val[i] = b[i]
return val
下面的幾行列出一個列表,並為csv生成列名。 這是出問題的地方。 有誰知道如何解決這一問題?
#find column names
input = map( lambda x: flattenjson( x ), input )
columns = map( lambda x: x.keys(), input )
columns = reduce( lambda x,y: x+y, columns )
columns = list( set( columns ) )
print(columns)
最后,我將json數據寫入.csv文件。
#write to .csv file
with open( fname, 'wb' ) as out_file:
csv_w = csv.writer( out_file )
csv_w.writerow( columns )
for i_r in input:
csv_w.writerow( map( lambda x: i_r.get( x, "" ), columns ) )
在此先感謝您的幫助。
首先,您需要解碼響應。 始終對HTTP請求使用請求庫。 它可以解碼json。
import requests
response = requests.get("http://trends.vera.org/data/county/1003/")
data = response.json()
您的第二部分還有另一個錯誤。 flattenjson需要2個要素,而您僅提供一個。 第二個是CSV文件中的分隔符。 此代碼有效:
print(flattenjson(data, ';'))
如果不需要所有數據,則可以指定確切的密鑰:
flattenjson(data['yearlyData'], ';').
事實證明,在R中執行此操作要容易得多。 該列表中只有一項具有表格數據,所有數據都是數字。 但是它也有一些有趣的格式,因此需要grab_column()
函數。 Result
包含表格格式的數據。
library(rjson)
tmp <- rjson::fromJSON(file = "http://trends.vera.org/data/county/1003/")
grab_column <- function(x) {
tmp <- as.character(x)
if (length(tmp) == 0) tmp <- NA
else tmp[tmp == "NULL"] <- NA
as.numeric(tmp)
}
Result <- as.data.frame(lapply(foo, FUN = grab_column))
Year <- data.frame(year = as.numeric(names(foo[[1]])))
Result <- cbind(Year, Result)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.