我试图在R中读取日志文件 它看起来像是从JSON文件中提取给我的,但是当尝试使用jsonlite读取它时,我收到以下错误消息:"错误:解析错误:尾随垃圾"。
以下是我的日志文件的样子:
{"date":"2017-05-11T04:37:15.587Z","userId":"admin","module":"Quote","action":"CreateQuote","identifier":"-.admin1002"},
{"date":"2017-05-11T05:12:24.939Z","userId":"a145fhyy","module":"Quote","action":"Call","identifier":"RunUY"},
{"date":"2017-05-11T05:12:28.174Z","userId":"a145fhyy","license":"named","usage":"External","module":"Catalog","action":"OpenCatalog","identifier":"wks.klu"},
您是否可以看到,列名称直接在每行的内容前面进行了精确处理(例如:" date":或" action" :) 并且某些行可以跳过某些列并添加其他列。
我想得到的输出是7列,每个列都填充相应的数据:
date
userId
license
usage
module
action
identifier
有没有人建议如何到达那里?
提前多多感谢
/////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////
感谢大家的回答。以下是关于我的问题的一些准确性:
我在其中一个日志文件的摘录中提供的数据。我有很多我需要阅读的独特表格。 我还没有添加任何逗号或任何内容。
@ r2evans 我尝试过以下方法:
Log3 <-read.table("/Projects/data/analytics.log.agregated.2017-05-11.log")
jsonlite::stream_in(textConnection(gsub(",$","",Log3)))
它返回以下错误:
Error: lexical error: invalid char in json text.
c(17, 18, 19, 20, 21, 22, 23, 2
(right here) ------^
我不确定如何使用我不熟悉的sed -e 's/,$//g' infile > outfile
和Sys.which("sed")
。我正在研究它,但是如果你有更多的精确度给我关于它的使用那将是伟大的。
答案 0 :(得分:0)
我已将您的示例保存为文件&#34; test.json&#34;并且能够像这样阅读和解析它:
library(jsonlite)
rf <- read_file("test.json")
rfr <- gsub("\\},", "\\}", rf)
data <- stream_in(textConnection(rfr))
它完全按照您的意愿解析并简化为一个整洁的数据框。我所做的就是寻找&#34;},&#34;而不是&#34;,$&#34;,因为最后一个逗号不是(必然)后跟换行字符。
但是,这可能不是非常大的文件的最佳解决方案..对于那些你可能需要首先寻找一种方法来通过删除逗号来修改文本文件本身。或者,如果可能,请询问导出此文件的人以正常的ndjson格式导出它: - )