Получение данных из массива json в scala

Я недавно начал работать на scala. У меня есть следующий массив json:

[
  {
     "id": "1",
    "formatType": "text",
    "value": "bgyufcie huis huids hufhsduhfsl hd"
  },
  {
    "id": "2",
    "formatType": "text size",
    "value": 12
  },
  {
    "id": "3",
    "formatType": "text alignment",
    "value" : "right"
  }
]

Я пытаюсь получить json из этого массива на основе идентификатора. Например, если id равен 2, я хочу получить следующее

 {
        "id": "2",
        "formatType": "text size",
        "value": 12
      }

и так далее для других идентификаторов. Я написал код, который сравнивает id и возвращает мне json, который выглядит следующим образом.

val getid = jsonString.parseJson match {
      case JsArray(elements) => elements.map(x => if(x.asJsObject().getFields("Id")(0).toString().replace("\"", "") == key) x)
    }

Этот код отлично работает, когда в массиве json у меня есть только один json. Но когда у меня есть несколько json с идентификаторами, как показано выше, этот код сравнивает только последнюю запись. То есть в данном случае это только сравнение данных с идентификатором 3. Это не сравнение с идентификатором 1 и идентификатором 2, из-за чего я не могу получить желаемые результаты. Я пытался использовать для каждого здесь, но это не сработало для меня. для каждого печатает полные данные в символах. Как я могу проверить все записи в моем массиве json, сопоставить идентификатор и вернуть его?


person Community    schedule 01.08.2020    source источник
comment
Привет @Lozy и добро пожаловать в Stackoverflow. Я заметил, что вы уже третий раз задаете один и тот же вопрос. Пожалуйста, отредактируйте свои вопросы и улучшите их, прежде чем создавать новую учетную запись и дублировать свои вопросы. Это обескураживает всех, кто пытается вам помочь. Два других вопроса: здесь и здесь   -  person mike    schedule 01.08.2020
comment
Нет, я продвинулся вперед. Я нашел решение, продолжил и застрял в другом месте. Тот же язык используется для объяснения сути проблемы   -  person    schedule 01.08.2020
comment
Что касается вашей реальной проблемы с разбором JSON с помощью Scala. Вы можете быть уверены, что на Stackoverflow или где-либо еще в Интернете есть достаточно ответов, поэтому такой вопрос, скорее всего, вызовет больше отрицательных голосов или будет помечен как дубликат.   -  person mike    schedule 01.08.2020
comment
Он использует спрей json и не имеет большого количества примеров для решения проблемы.   -  person    schedule 01.08.2020
comment
Хорошо, справедливое замечание. Я вижу, что есть небольшая разница в каждом из вопросов. Но я уверен, что другие не будут читать так внимательно, как я сейчас, и, вероятно, либо проигнорируют, либо понизят этот вопрос. И с личной точки зрения, как только кто-то создает новую учетную запись, это уже выглядит подозрительно для меня. Я действительно пытаюсь помочь вам и заставить кого-то ответить на ваш вопрос.   -  person mike    schedule 01.08.2020
comment
Кроме того, если вы найдете ответ полезным (например, ответ от ForeverLearner) в другом сообщении, рекомендуется также оценить его, приняв ответ.   -  person mike    schedule 01.08.2020
comment
Отвечает ли это на ваш вопрос? Получение json из массива json, полученного из URL-адреса   -  person Denis Sergeev    schedule 02.08.2020
comment
Отвечает ли это на ваш вопрос? Разбор массива JSON в Scala   -  person Alperen Kantarcı    schedule 02.08.2020


Ответы (1)


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

Однако в этом конкретном случае вам просто нужно использовать find, а не map:

val getid = jsonString.parseJson match {
  case JsArray(elements) =>
    elements.find(_.asJsObject().getFields("Id")(0).toString().replace("\"", "") == key)
  case _ =>
    None
}

Это вернет None, если id не найдено или JSON не является JsArray, иначе он вернет Some(element)

В более общем смысле, вместо обработки необработанных объектов JSON я бы рекомендовал использовать библиотеку, которая преобразует весь JSON в объекты Scala, а затем обрабатывает эти объекты Scala.

person Tim    schedule 01.08.2020