2013-07-29 61 views
1

假設我有以下JSON數據:多行導入JSON數據,並轉換爲數據幀中的R

{ "_id" : { "$oid" : "string" }, "titulo" : "string", "id_cv" : 1132, "textos" : [ { "fecha" : { "$date" : 1217376000000 }, "estado" : "string", "texto" : "string", "source_url" : "string" } ] } 
{ "_id" : { "$oid" : "string" }, "titulo" : "string", "autores" : ",\"string\",\"string\",\"string\",\"string",5", "id_cv" : 1138, "textos" : [ { "fecha" : { "$date" : 1217548800000 }, "estado" : "string", "texto" : "string", "source_url" : "string" } ] } 

我試圖導入至R JSON數據和在變換它至最終的R數據框架。

假設我有R中的下面的腳本:

library("rjson") 
json_file <- "/Users/usr/file/json_data.json" 
json_data <- fromJSON(paste(readLines(json_file), collapse="")) 

data = unlist(json_data) 

title=data[names(data)=="titulo"] 
print(title) 

text=data[names(data)=="textos.texto"] 
print(text) 

url=data[names(data)=="textos.source_url"] 
print(url) 

當運行該腳本JSON數據僅產生含有JSON數據文件的第一行的數據幀。我有大約200行。我知道的一個問題是JavaScript不允許多行字符串。我試圖用這個來應對不同的方式:

  1. 添加到數據的每個‘行’結束「「」數據的每個‘行’之間
  2. 添加。「」」。
  3. 在每行數據之間添加「\」。
  4. 將「\」添加到每個「行」數據的末尾。
  5. 轉換所有多行中的一行(替換「\ n」個用「\ n」個)

所有上述的使用正則表達式已經嘗試。

我的問題是:我如何操作JSON數據,以便所有'行'的數據都被讀入到R中,以便我可以將它們取消列表並構造相應的數據框,標題','文本','網址'和行等於JSON數據中的'行'?

我試圖這樣同時使用R中的RJSON & RJSONIO庫,但我很矛盾的關於我當時正在使用哪一個,因爲我相信最終的問題是使用JSON數據本身

的格式

回答

2

JSON字符串本身確實不太正確。

  1. 有沒有在字符串中的一個缺失的\,所以一個quotationmark沒有正確屏蔽:"autores" : ",\"string\",\"string\",\"string\",\"string",5"應該"autores" : ",\"string\",\"string\",\"string\",\"string\",5"
  2. 個人{}對象(1號線和2,當你打電話給他們)必須結合在上面的結構中,可以是數組([]),也可以是帶有標識符的對象({}),否則它沒有明確定義,JSON結構將如何解釋。

我修改了JSON字符串由兩個陣列元件,每一個都含有一個管線(=一個JSON對象):

[{ "_id" : { "$oid" : "string" }, 
    "titulo" : "string", 
    "id_cv" : 1132, 
    "textos" : [ { "fecha" : { "$date" : 1217376000000 }, 
           "estado" : "string", 
           "texto" : "string", 
          "source_url" : "string" } ] }, 

{ "_id" : { "$oid" : "string" }, 
    "titulo" : "string", 
    "autores" : ",\"string\",\"string\",\"string\",\"string\",5", 
    "id_cv" : 1138, 
    "textos" : [ { "fecha" : { "$date" : 1217548800000 }, 
           "estado" : "string", 
           "texto" : "string", 
          "source_url" : "string" } ] }] 

我添加新行更好的可讀性。換行符和空格(單個標識符或字符串之外)是 - 或更好的:應該被JSON解析器忽略。