Как искать JSON в R? - PullRequest
       2

Как искать JSON в R?

0 голосов
/ 12 сентября 2018

Итак, у меня есть структура данных в JSON со следующей организацией:

{
  object1: {
    "sub_object1": {
      "attribute1": ["potato", "asparagus", "celery"],
      "attribute2": ["ostrich", "pelican"]
    },
    "sub_object2": {
    }
  },
  object2: {
  }
}

Итак, я читаю это с использованием rjson и пытаюсь найти структуру. Пока у меня что-то вроде этого:

for (entry in json_obj) {
  if (grepl(query, entry$sub_object1$attribute1, fixed=TRUE)) {
    ... Record result object here ...
  } else if (grepl(query, entry$sub_object1$attribut2, fixed=TRUE)) {
    ... Record result object here ...
  }
}

По сути, если бы я искал "potato", я бы хотел, чтобы он возвращал что-то вроде следующего:

{
  object1: {
    "matched_string": "potato",
    "matched_property": attribute1,
    "full_entry": entry
  }
}

Python - мой родной язык (я использую R для внешнего интерфейса R Shiny), поэтому я никогда не думал, что манипуляции с JSON будут такими сложными! Любая помощь будет очень и очень признательна!

1 Ответ

0 голосов
/ 13 сентября 2018

Чтение в json-файле в R превратит его в список списков (списков ...).Затем вы можете пройти через этот вложенный список, чтобы получить аналогичную структуру возвращаемых значений.

Например:

# it's recommended to use jsonlite as the json parser
json <- jsonlite::fromJSON('{
  "object1": {
    "sub_object1": {
      "attribute1": ["potato", "asparagus", "celery"],
      "attribute2": ["ostrich", "pelican"]
    },
    "sub_object2": {
    }
  },
  "object2": {
  }
}')

find <- function(obj, string)
{
    lapply(obj, function(x) {
        if(is.list(x))
            find(x, string)
        else grepl(string, x, fixed=TRUE)
    })
}

jsonlite::toJSON(find(json, "potato"), auto_unbox=TRUE, pretty=TRUE)
#{
#  "object1": {
#    "sub_object1": {
#      "attribute1": [true, false, false],
#      "attribute2": [false, false]
#    },
#    "sub_object2": {}
#  },
#  "object2": {}
#} 

Я предполагаю, что как только вы получите json выше, выможете использовать ваш любимый язык, чтобы преобразовать его в нужный вам формат (что не совсем подробно описано в вашем вопросе).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...