У меня есть json, в котором есть какое-то нулевое значение, я просто хочу заменить это нулевое значение пустой строкой, используя play json.
Пример json:
{
"featureLength": 348.4256690782206,
"projectName": null,
"total_Feature_Length": 348.43
}
Вы отправляете или получаете JSON?
@wwkudu получение
это то, что вы имели в виду?





Мы используем два способа «получить» JSON: «специальный» способ и «класс случая». Специально у вас может получиться что-то вроде:
val projectName = (json \ "projectName").asOpt[String].getOrElse("")
который примет строку или ноль и даст вам строку в переменной projectName. В случае "класса дела" мы определяем преобразователь чтения, скажем, для класса дела Feature, а затем
implicit val reads: Reads[Feature] = {
((__ \ "featureLength").read[Double] and
(__ \ "projectName").read[Option[String]] and
(__ \ "total_Feature_Length").read[Double]) ((length:Double, projectName:Option[String], totalLength:Double) =>
Feature(length,projectName.getOrElse(""),totalLength))
}
который преобразует входные данные в ваш класс case, и снова getOrElse гарантирует, что входящее имя проекта, будь то строка или ноль, после этого приведет к строке.
Иногда вам нужно отправить эти данные клиенту, но вы не можете отправить Option [String], поэтому вам нужно преобразовать их в строку (пустую или нет). Если у нас есть Iterable [String], это еще больше усугубит ситуацию, поскольку нам нужно использовать Iteralbe [Option [String]] для воспроизведения json. Если набор данных слишком велик, это ненужный итерационный сбор только для того, чтобы решить, следует ли заменить значение пустой строкой. Вместо этого Play json должен иметь возможность принимать это решение для любого строкового поля самостоятельно. Похоже, вы можете сделать это специальным способом. Тогда должен быть возможен вариант класса case. мой 2c
Что вы уже пробовали?