2016-09-08 54 views
0

我有一個.txt文件,這個結構如何讀取一個文件中包含的多個JSON結構?

section1#[{"p": "0.999834", "tag": "MA"},{"p": "1", "tag": "MO"},...etc...}] 
section1#[{"p": "0.9995", "tag": "NC"},{"p": "1", "tag": "FL"},...etc...}] 
... 
section2#[{"p": "0.9995", "tag": "NC"},{"p": "1", "tag": "FL"},...etc...}] 

我想利用R與命令

library(jsonlite) 
data <- fromJSON("myfile.txt") 

讀它,但我得到這個

Error in feed_push_parser(readBin(con, raw(), n), reset = TRUE) : 
    lexical error: invalid char in json text. 
             section2#[{"p": "0.99 
        (right here) ------^ 

哪有我甚至通過分段閱讀它?

+1

您可能需要使用'readLines'手動讀取文件,刪除'section'部分,然後將它傳遞給'fromJSON'。 – Psidom

+0

什麼是生成這樣的文件? – MrFlick

+0

它來自mySQL – pachamaltese

回答

4

刪除前綴和扁平JSON陣列一起結合成一個數據幀:

raw_dat <- readLines(textConnection('section1#[{"p": "0.999834", "tag": "MA"},{"p": "1", "tag": "MO"}] 
section1#[{"p": "0.9995", "tag": "NC"},{"p": "1", "tag": "FL"}] 
section2#[{"p": "0.9995", "tag": "NC"},{"p": "1", "tag": "FL"}]')) 

library(stringi) 
library(purrr) 
library(jsonlite) 

stri_replace_first_regex(raw_dat, "^section[[:digit:]]+#", "") %>% 
    map_df(fromJSON) 
##   p tag 
## 1 0.999834 MA 
## 2  1 MO 
## 3 0.9995 NC 
## 4  1 FL 
## 5 0.9995 NC 
## 6  1 FL 
+0

非常感謝。我沒有創建該文件,它來自公共數據。 IT正是我所害怕的,JSON結構是無效的。 – pachamaltese

1

從各行刪除section#。然後,您的.txt將在每個索引處具有包含JSON對象的2D數組。 可以通過訪問它作爲foo[0][0]訪問元件是第一行的第一個目的和foo[m][n]其中mnumber of sections -1nnumber of objects in each section -1

+1

實際上,如果刪除前綴,它仍然不是有效的JSON文件。一個JSON文件需要具有單個根元素。你需要在每行的末尾包裝一個'[]'並且包含',''。它更像是[JSON行](http://jsonlines.org/)格式。 – MrFlick

+0

@MrFlick它不會是一個JSON文件,但它會是一個二維數組。 –

+0

嗯,它不是一個JSON數組。你是在說用readLines()或其他什麼來讀取數據?你如何在R中使用這個2D數組? – MrFlick

相關問題