簡體   English   中英

將大型JSON轉換為CSV — 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM