es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Leer clave-valor del json pero ignorar objeto.

Tengo el siguiente json:

"atrr": {
     "data": {
          "id": "asfasfsaf",
          "name": "cal",
          "type": "state",
          "ref": [
            "xyz",
            "uhz",
            "arz"
          ]
        }
}

Estoy leyendo esto de la siguiente manera, pero no estoy obteniendo el valor k,v:

def getData: Map[String, String] = (atrr \ "data").asOpt[Map[String, String]].getOrElse(Map[String, String]())

Sin el ref funciona bien. ¿Cómo puedo ignorar ref[] del json en el código ya que es un objeto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para ignorar ref[] del json y tratarlo como un objeto en el código, puedes modificar la función getData para usar el método asOpt de la clase JsObject en lugar del método asOpt de la clase JsValue. De esta manera, puedes acceder al campo ref como un objeto JsArray y omitirlo en la conversión del mapa.

    Aquí está la función modificada:

    import play.api.libs.json._
    
    def getData: Map[String, String] = {
      val dataObj = (atrr \ "data").asOpt[JsObject].getOrElse(Json.obj())
      dataObj.fields
        .filterNot(_._1 == "ref")
        .mapValues(_.as[String])
        .toMap
    }
    

    Esta función lee el campo data como un JsObject y obtiene todos sus campos como una secuencia de tuplas (String, JsValue). Luego filtra el campo ref según su nombre y mapea los campos restantes a tuplas (String, String) utilizando el método as[String] de la clase JsValue. Finalmente, convierte las tuplas en un mapa utilizando el método toMap de la secuencia.

    Ten en cuenta que esta función puede lanzar una excepción si alguno de los campos en el json no es del tipo JsString. Es posible que desees manejar estos casos por separado según tus necesidades.

Comments are closed.