#r #json
#r #json
Вопрос:
Я использую R. У меня есть группа файлов json, подобных этому:
файл1.json файл2.json файл3.json
Каждый файл имеет одинаковую структуру с несколькими событиями внутри, организованными следующим образом
{
"id": MEME1,
"created_at": 55796,
"text": "patatipatata",
"Perso": {
"id": "MEMEuk",
},
{
"id": MEME2,
"created_at": 55795,
"text": "lolme",
"Perso": {
"id": "MEMEfr",
}
Я хотел бы отредактировать каждый файл json с именем исходного файла для каждого события, подобного этому для file1.json и других
{
"file_name": file1.json,
"id": MEME,
"created_at": 55796,
"text": "patatipatata",
"Perso": {
"id": "MEMEuk",
},
{
"file_name": file1.json,
"id": MEME2,
"created_at": 55795,
"text": "lolme",
"Perso": {
"id": "MEMEfr",
}
Я не очень хорошо знаком со структурой json и редакцией json с R.
Конечная цель — объединить и сгладить группу файлов json и получить вектор с именем исходного файла для каждого события. Эта последняя часть меня устраивает.
Спасибо за вашу помощь.
Комментарии:
1. Эти файлы не являются допустимыми json (
MEME1
должны быть заключены в кавычки, встроенный словарь не закрыт, а список должен быть заключен в квадратные скобки[
/]
). Безопасно ли это исправить, или ваши файлы действительно недействительны и должны оставаться такими?
Ответ №1:
Эти файлы являются недопустимыми файлами json по нескольким причинам. Я исправлю ошибки, чтобы они правильно анализировались.
- file1.json
[{ "id": "MEME1", "created_at": 55796, "text": "patatipatata", "Perso": { "id": "MEMEuk" } }, { "id": "MEME2", "created_at": 55795, "text": "lolme", "Perso": { "id": "MEMEfr" } }]
- file2.json (упрощенный)
[{ "id": "MEME3", "created_at": 55796 }, { "id": "MEME2", "created_at": 55795 }]
Прочитайте их в:
files <- list.files(pattern = "\.json$", full.names = TRUE)
files
# [1] "./file1.json" "./file2.json"
alldat <- lapply(setNames(nm = files), jsonlite::read_json)
str(alldat[[2]]) # files[2], aka 'file2.json'
# List of 2
# $ :List of 2
# ..$ id : chr "MEME3"
# ..$ created_at: int 55796
# $ :List of 2
# ..$ id : chr "MEME2"
# ..$ created_at: int 55795
Вставка имени файла
alldat2 <- Map(function(nm, onedat) {
lapply(onedat, function(x) {
x$file_name <- nm
x
})
}, names(alldat), alldat)
str(alldat2[[2]])
# List of 2
# $ :List of 3
# ..$ id : chr "MEME3"
# ..$ created_at: int 55796
# ..$ file_name : chr "./file2.json"
# $ :List of 3
# ..$ id : chr "MEME2"
# ..$ created_at: int 55795
# ..$ file_name : chr "./file2.json"
Запишите обратно в файл
Map(function(onedat, fn) jsonlite::write_json(onedat, fn, pretty = TRUE, auto_unbox = TRUE),
alldat2, files)
#
#r #json
#r #json
Вопрос:
Я использую R. У меня есть группа файлов json, подобных этому:
файл1.json файл2.json файл3.json
Каждый файл имеет одинаковую структуру с несколькими событиями внутри, организованными следующим образом
{
"id": MEME1,
"created_at": 55796,
"text": "patatipatata",
"Perso": {
"id": "MEMEuk",
},
{
"id": MEME2,
"created_at": 55795,
"text": "lolme",
"Perso": {
"id": "MEMEfr",
}
Я хотел бы отредактировать каждый файл json с именем исходного файла для каждого события, подобного этому для file1.json и других
{
"file_name": file1.json,
"id": MEME,
"created_at": 55796,
"text": "patatipatata",
"Perso": {
"id": "MEMEuk",
},
{
"file_name": file1.json,
"id": MEME2,
"created_at": 55795,
"text": "lolme",
"Perso": {
"id": "MEMEfr",
}
Я не очень хорошо знаком со структурой json и редакцией json с R.
Конечная цель - объединить и сгладить группу файлов json и получить вектор с именем исходного файла для каждого события. Эта последняя часть меня устраивает.
Спасибо за вашу помощь.
Комментарии:
1. Эти файлы не являются допустимыми json ( MEME1
должны быть заключены в кавычки, встроенный словарь не закрыт, а список должен быть заключен в квадратные скобки [
/ ]
). Безопасно ли это исправить, или ваши файлы действительно недействительны и должны оставаться такими?
Ответ №1:
Эти файлы являются недопустимыми файлами json по нескольким причинам. Я исправлю ошибки, чтобы они правильно анализировались.
- file1.json
[{
"id": "MEME1",
"created_at": 55796,
"text": "patatipatata",
"Perso": {
"id": "MEMEuk"
}
},
{
"id": "MEME2",
"created_at": 55795,
"text": "lolme",
"Perso": {
"id": "MEMEfr"
}
}]
- file2.json (упрощенный)
[{
"id": "MEME3",
"created_at": 55796
},
{
"id": "MEME2",
"created_at": 55795
}]
Прочитайте их в:
files <- list.files(pattern = "\.json$", full.names = TRUE)
files
# [1] "./file1.json" "./file2.json"
alldat <- lapply(setNames(nm = files), jsonlite::read_json)
str(alldat[[2]]) # files[2], aka 'file2.json'
# List of 2
# $ :List of 2
# ..$ id : chr "MEME3"
# ..$ created_at: int 55796
# $ :List of 2
# ..$ id : chr "MEME2"
# ..$ created_at: int 55795
Вставка имени файла
alldat2 <- Map(function(nm, onedat) {
lapply(onedat, function(x) {
x$file_name <- nm
x
})
}, names(alldat), alldat)
str(alldat2[[2]])
# List of 2
# $ :List of 3
# ..$ id : chr "MEME3"
# ..$ created_at: int 55796
# ..$ file_name : chr "./file2.json"
# $ :List of 3
# ..$ id : chr "MEME2"
# ..$ created_at: int 55795
# ..$ file_name : chr "./file2.json"
Запишите обратно в файл
./file1.json`
# NULL
#
#r #json
#r #json
Вопрос:
Я использую R. У меня есть группа файлов json, подобных этому:
файл1.json файл2.json файл3.json
Каждый файл имеет одинаковую структуру с несколькими событиями внутри, организованными следующим образом
{
"id": MEME1,
"created_at": 55796,
"text": "patatipatata",
"Perso": {
"id": "MEMEuk",
},
{
"id": MEME2,
"created_at": 55795,
"text": "lolme",
"Perso": {
"id": "MEMEfr",
}
Я хотел бы отредактировать каждый файл json с именем исходного файла для каждого события, подобного этому для file1.json и других
{
"file_name": file1.json,
"id": MEME,
"created_at": 55796,
"text": "patatipatata",
"Perso": {
"id": "MEMEuk",
},
{
"file_name": file1.json,
"id": MEME2,
"created_at": 55795,
"text": "lolme",
"Perso": {
"id": "MEMEfr",
}
Я не очень хорошо знаком со структурой json и редакцией json с R.
Конечная цель - объединить и сгладить группу файлов json и получить вектор с именем исходного файла для каждого события. Эта последняя часть меня устраивает.
Спасибо за вашу помощь.
Комментарии:
1. Эти файлы не являются допустимыми json ( MEME1
должны быть заключены в кавычки, встроенный словарь не закрыт, а список должен быть заключен в квадратные скобки [
/ ]
). Безопасно ли это исправить, или ваши файлы действительно недействительны и должны оставаться такими?
Ответ №1:
Эти файлы являются недопустимыми файлами json по нескольким причинам. Я исправлю ошибки, чтобы они правильно анализировались.
- file1.json
[{
"id": "MEME1",
"created_at": 55796,
"text": "patatipatata",
"Perso": {
"id": "MEMEuk"
}
},
{
"id": "MEME2",
"created_at": 55795,
"text": "lolme",
"Perso": {
"id": "MEMEfr"
}
}]
- file2.json (упрощенный)
[{
"id": "MEME3",
"created_at": 55796
},
{
"id": "MEME2",
"created_at": 55795
}]
Прочитайте их в:
files <- list.files(pattern = "\.json$", full.names = TRUE)
files
# [1] "./file1.json" "./file2.json"
alldat <- lapply(setNames(nm = files), jsonlite::read_json)
str(alldat[[2]]) # files[2], aka 'file2.json'
# List of 2
# $ :List of 2
# ..$ id : chr "MEME3"
# ..$ created_at: int 55796
# $ :List of 2
# ..$ id : chr "MEME2"
# ..$ created_at: int 55795
Вставка имени файла
alldat2 <- Map(function(nm, onedat) {
lapply(onedat, function(x) {
x$file_name <- nm
x
})
}, names(alldat), alldat)
str(alldat2[[2]])
# List of 2
# $ :List of 3
# ..$ id : chr "MEME3"
# ..$ created_at: int 55796
# ..$ file_name : chr "./file2.json"
# $ :List of 3
# ..$ id : chr "MEME2"
# ..$ created_at: int 55795
# ..$ file_name : chr "./file2.json"
Запишите обратно в файл
./file2.json`
# NULL
readLines(files[2])
# [1] "["
# [2] " {"
# [3] " "id": "MEME3","
# [4] " "created_at": 55796,"
# [5] " "file_name": "./file2.json""
# [6] " },"
# [7] " {"
# [8] " "id": "MEME2","
# [9] " "created_at": 55795,"
# [10] " "file_name": "./file2.json""
# [11] " }"
# [12] "]"
Возможно, не гарантируется, что они выглядят точно так же, как до чтения, хотя структура (и разборчивость json) должны быть в порядке.
Комментарии:
1. Это работало для меня до тех пор, пока часть не вставила имя файла и не создала файл alldat2. Затем json изменился, и его нелегко сгладить, но мне удалось это сделать. Спасибо r2evans.