Autor Tema: Remover un dato en una lista de listas JSON  (Leído 212 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado JuanArroz
  • [L0] Ladrón de espacio en la BD
  • Mensajes: 2
  • cl
  • Bienvenidos/as a Bomber Code
    • Ver Perfil
Remover un dato en una lista de listas JSON
« on: 22 Abril de 2021, 12:59 am »
Hola, llevo tiempo buscando una forma de meterme en una lista que está dentro de otra lista para borrar una lista según un dato que esté dentro de la lista que quiero eliminar, pero no lo he podido solucionar, esta es la cadena:

Código: [Seleccionar]
{
  "Empresas": [
    {
      "NombreEmpresa": "TEST1"
      "Empleados": [
        {
          "Nombre": "Matias Vargas",
          "FechaNacimiento": ""
        },
        {
          "Nombre": "Luis Pérez",
          "FechaNacimiento": ""
        }
      ],
    },
    {
      "NombreEmpresa": "TEST2",
      "Empleados": [
        {
          "Nombre": "Martin Sanchez",
          "FechaNacimiento": "",
        }
      ]
    }
  ]
}

Como ven quiero meterme dentro de "Empresas" para después meterme dentro de los empleados de la empresa que se llame "TEST1" y borrar a Luis Pérez (Su nombre y fecha de nacimiento)

Intenté hacer esto:

Código: [Seleccionar]
string readed = File.ReadAllText("empresas.json");
var jObject = JObject.Parse(readed);
JArray EmpleadosArray = (JArray)jObject["Empleados"].Where(obj => obj["NombreEmpresa"].Value<string>() == "TEST1");
var empleadoParaEliminar = EmpleadosArray.Where(obj => obj["Empleados"].Where(obj2 => obj2["Nombre"].Value<string>() == "Luis Pérez")));
 
foreach (var item in empleadoParaEliminar)
{
       EmpleadosArray.Remove(item);
}

Pero obviamente iba a dar errores y no iba a funcionar
Cita
"No se puede convertir implícitamente el tipo 'System.Collections.Generic.IEnumerable<Newtonsoft.Json.Linq.JToken>' en 'bool'"

Cita
"No se puede convertir expresión lambda en el tipo delegado indicado porque algunos de los tipos de valores devueltos del bloque no se pueden convertir implícitamente en el tipo de valor devuelto del delegado"

No necesito hacerlo así exactamente, si existe otra forma de acceder a los datos agradecería bastante que me la pasaran

Conectado Rock Lee

  • Administrador
  • *
  • Mensajes: 1203
  • Sexo: Masculino
  • ar
  • Digitalizando tu Mundo
    • Ver Perfil
    • La nueva era del conocimiento
Re:Remover un dato en una lista de listas JSON
« Respuesta #1 on: 07 Julio de 2021, 09:23 pm »
No estoy tan curtido con listas en json pero parece que el valor pasado en si o quiere editarse no lo puede interpretar... tendre leer al respecto aunque capas ya lo resolviste, igualmente voy a tratar una posible solucion para otros.


Saludos Familia!

Desconectado JuanArroz
  • [L0] Ladrón de espacio en la BD
  • Mensajes: 2
  • cl
  • Bienvenidos/as a Bomber Code
    • Ver Perfil
Re:Remover un dato en una lista de listas JSON
« Respuesta #2 on: 08 Julio de 2021, 02:26 am »
Hola, después de mucho tiempo investigando, no encontré una forma exacta de hacer lo que quería, sin embargo, ya que lo que quería no funcionaba, me dispuse a pensar en otras formas y lo logré, simplemente lo que hice fue agregar una ID a la la clase "Empleado" y simplemente usé el método Where() para buscar el empleado con la ID específica y descartar a los demás empleados, algo así

Código: [Seleccionar]
        string readed = File.ReadAllText(data);
        var jToken = JToken.Parse(readed);
        var resultado = jToken["Empresas"].SelectMany(x => x["Empleados"]).ToList(); // Busca a TODOS los Empleados

        foreach (var item in resultado)
        {
            var times = item.SelectTokens("ID").Values(); // Busca el ID en TODOS los empleados
            if (times.Where(x => x.ToString().Trim() == text).Any()) // Si la ID es igual a text, entonces seleccionará solo al Empleado con esa ID y descartará a los demás
            {
                item.Remove(); // Remueve al Empleado seleccionado
            }
        }

Espero que a alguien le sirva esto, puesto que yo por más que busqué, no encontré ayuda en español

Un saludo