Как проанализировать файл с несколькими JSON в R? - PullRequest
0 голосов
/ 20 мая 2018

У меня есть следующий «сложенный JSON» объект в R, example1.json:

{"ID":"12345","Timestamp":"20140101", "Usefulness":"Yes",
  "Code":[{"event1":"A","result":"1"},…]}
{"ID":"1A35B","Timestamp":"20140102", "Usefulness":"No",
  "Code":[{"event1":"B","result":"1"},…]}
{"ID":"AA356","Timestamp":"20140103", "Usefulness":"No",
  "Code":[{"event1":"B","result":"0"},…]}

Они не разделены запятыми.Фундаментальная цель состоит в том, чтобы проанализировать определенные поля (или все поля) в R data.frame или data.table:

    Timestamp    Usefulness
 0   20140101      Yes
 1   20140102      No
 2   20140103      No

Обычно я бы читал в JSON внутри R следующим образом:

library(jsonlite)

jsonfile = "example1.json"
foobar = fromJSON(jsonfile)

Это, однако, приводит к ошибке синтаксического анализа:

Error: lexical error: invalid char in json text.
          [{"event1":"A","result":"1"},…]} {"ID":"1A35B","Timestamp"
                     (right here) ------^

Этот вопрос похож на следующий, но в R: несколько объектов Json в одном файле извлекаются с помощью python

РЕДАКТИРОВАТЬ: Этот формат файла называется «JSON с разделителями новой строки», NDJSON.

1 Ответ

0 голосов
/ 20 мая 2018
  1. Три точки ... лишают законной силы ваш JSON, следовательно, ваш lexical error.

  2. Вы можете использовать jsonlite::stream_in() для «потоковой передачи» строкJSON.


library(jsonlite)

jsonlite::stream_in(file("~/Desktop/examples1.json"))
# opening file input connection.
# Imported 3 records. Simplifying...
# closing file input connection.
#      ID Timestamp Usefulness Code
# 1 12345  20140101        Yes A, 1
# 2 1A35B  20140102         No B, 1
# 3 AA356  20140103         No B, 0

Данные

Я очистил ваши примеры данных, чтобы сделать их действительными в формате JSON, и сохранил их на рабочем столе как ~/Desktop/examples1.json

{"ID":"12345","Timestamp":"20140101", "Usefulness":"Yes","Code":[{"event1":"A","result":"1"}]}
{"ID":"1A35B","Timestamp":"20140102", "Usefulness":"No","Code":[{"event1":"B","result":"1"}]}
{"ID":"AA356","Timestamp":"20140103", "Usefulness":"No","Code":[{"event1":"B","result":"0"}]}
...