Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-01-2019
Yulexis Yulexis is offline
Miembro
 
Registrado: sep 2016
Posts: 19
Poder: 0
Yulexis Va por buen camino
Leer fichero JSON

Un saludo para todos.
Tengo la siguiente estructura en JSON, que cuenta con tres elementos(aunque estos pueden ser más o menos elementos en la vida real):

Cita:
{"nombre":"Juan", "destinatario": "Pedro", "mensaje": "de Juan para Pedro", "estado":"nuevo"}{"nombre":"Alberto", "destinatario": "Pedro", "mensaje": "de Alberto para Pedro", "estado":"nuevo"}{"nombre":"Carlos", "destinatario": "Pedro", "mensaje": "de Carlos para Pedro", "estado":"nuevo"}
Lo que necesito es recorrer todos los elementos e ir obteniendo de cada uno sus pares clave/valor:
nombre:
destinatario:
mensaje:
estado:

He leído que utilizando la unidad System.Json se puede, pero por más que busco y leo no encuentro la manera. En los ejemplos que encuentro siempre ponen de ejemplo otras estructuras JSON distintas a la que tengo yo y cuando intento modificarlos no hay manera.
Utilizo Delphi 10.2
Sin más, espero alguien me pudiera ayudar…

Última edición por Neftali [Germán.Estévez] fecha: 10-01-2019 a las 09:55:12. Razón: Corregir formato
Responder Con Cita
  #2  
Antiguo 09-01-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Te aconsejo que hagas una búsqueda en los foros por la palabra "json", salen varios enlaces que te deben servir.
Aunque tampoco has dicho exactamente qué error te sale.
Responder Con Cita
  #3  
Antiguo 10-01-2019
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Lo primero que habría que hacer es colocar un JSON válido o completo.
El trozo de JSON que has puesto no cumple esa condición.

Para validarlo puedes probar cualquiera de los validadores en línea que hay:Verás que en todos obtienes el mismo resultado. Esa porción no es un JSON válido.
Una vez que lo tengas correcto, se puede realizar un parse con las clases de Delphi que comentas, utilizar otras como superobject o alguna otra herramienta externa como JSONToDelphiClass, que te genera de forma automática las clases delphi a partir de un JSON, para tratarlo cómodamente.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 11-01-2019
Yulexis Yulexis is offline
Miembro
 
Registrado: sep 2016
Posts: 19
Poder: 0
Yulexis Va por buen camino
Leer JSON

Muchas gracias Neftali y Casimiro Notevi
Germán nuevamente me tiras un cable hermano.
Tienes toda la rasón: no es un JSON válido, debería quedarme de esta forma (no les he puesto la manera en que lo traté de la forma en que esta porque la verdad me da hasta pena por lo disparatado e ineficiente del invento):
Código:
[{
              "nombre": "Juan",
              "destinatario": "Pedro",
              "mensaje": "de Juan para Pedro",
              "estado": "nuevo"
  }, {
              "nombre": "Alberto",
              "destinatario": "Pedro",
              "mensaje": "de Alberto para Pedro",
              "estado": "nuevo"
  }, {
              "nombre": "Carlos",
              "destinatario": "Pedro",
              "mensaje": "de Carlos para Pedro",
              "estado": "nuevo"
  }]
Ahora, en los foros de PHP que he leído (en php si que estoy en cero) el siguiente código (modificado para mis asuntos claro) es el que he encontrado para gerear un JSON y enviarlo a un cliente, pero ya veo que no es el corecto o simplemente estoy haciendo algo mal:
Código PHP:
function dame_mensajes($mysqli$usuario_solicitante)
  {
              
$mensajes='';
              
$sql 'SELECT * FROM bandeja_entrada WHERE destinatario = "' $usuario_solicitante '"';
   
              if (
$result $mysqli->query($sql)) 
              {
                          while(
$r=$result->fetch_assoc())
                          {
                              
$mensajes $mensajes json_encode($r);
                          }
                          
$result->close();
                          return 
$mensajes;
              }
              else
              {
                          return 
"ERROR:Ha ocurrido un error en el servidor.
  Intente el envío más tarde y si el problema persiste contacte con el administrador del sistema."
;
              }
  } 
Esta función la modifiqué para que me generara un JSON válido cambiando las siguientes líneas:
Código PHP:
$mensajes $mensajes json_encode($r); 
por
Código PHP:
$mensajes $mensajes "," json_encode($r); 
y

Código PHP:
return $mensajes
por
Código PHP:
return "[" $mensajes "]"
De esta manera (que no se si es la correcta) me genera “casi” lo que necesito. Digo “casi” porque me genera una coma (,) que no va (marcada en rojo).
Código:
[,{
              "nombre": "Juan",
              "destinatario": "Pedro",
              "mensaje": "de Juan para Pedro",
  …
¿Alguna idea para quitarla? O algún otro código para genrar el JSON correctamente.
Responder Con Cita
  #5  
Antiguo 11-01-2019
Yulexis Yulexis is offline
Miembro
 
Registrado: sep 2016
Posts: 19
Poder: 0
Yulexis Va por buen camino
Ya me falta menos

Saludos nuevamente.
Luego de tener el JSON con un formato correcto, este es el código para parsearlo y obtener los datos.
Aún me falta quitar en el PHP la coma que me genera de más para que todo ande como la seda.
Código Delphi [-]
var
  JSo :  TJSONObject;
  JSOarray : TJSONArray;
  JSOValue: TJSONValue;
  remitente, destinatario, mensaje, estado : string;
begin
      JSOarray := TJSONObject.ParseJSONValue(Memo_Respuesta.Text) as TJSONArray;
      for JSOValue in JSOarray do
      begin
        JSo := TJSONObject.ParseJSONValue(JSOValue.ToJSON) as TJSONObject;
        remitente :=  JSo.Values['nombre'].ToString;
        destinatario :=  JSo.Values['destinatario'].ToString;
        mensaje :=  JSo.Values['mensaje'].ToString;
        estado :=  JSo.Values['estado'].ToString;
      end;
end;

Neftali, Cuando comencé con este proyecto, que no es más que la interacción de una app android con un servicio web, esta y las otras entradas relacionadas fueron las que más me ayudaron a tener claro lo que debía hacer. Más allá de la metodología en sí que he utilizado: MUCHAS GRACIAS HERMANO.
http://neftali.clubdelphi.com/25-gen...ervice-en-php/


Aquí te dejo unas imágenes para que veas lo que estoy realizando y por si tienes alguna sugerencia. Espero puedas verlas.
https://nube.uic.cu/index.php/s/gfzw6tFxwTCwrCN
Responder Con Cita
  #6  
Antiguo 14-01-2019
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Yulexis Ver Mensaje
Aquí te dejo unas imágenes para que veas lo que estoy realizando y por si tienes alguna sugerencia. Espero puedas verlas.
https://nube.uic.cu/index.php/s/gfzw6tFxwTCwrCN

La verdad es que tiene muy buena pinta.


No si si lo has revisado. En los ejemplos de la web verás que se usa el componente TRestResponseAdapter. No se si lo estás utilizando, pero te puede facilitar bastante el trabajo a la hora de recuperar resultados.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Leer JSON sin nombre Ramsay Varios 2 27-09-2016 14:52:52
Leer fichero ini Angel.Matilla C++ Builder 13 21-04-2015 23:28:27
Leer fichero XML itsi Internet 1 23-10-2008 22:50:15
leer de fichero machingol Varios 7 09-05-2007 17:22:42
Leer fichero rocio84 Varios 1 21-05-2006 10:45:06


La franja horaria es GMT +2. Ahora son las 22:13:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi