Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-09-2020
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Leer archivo JSON

buenas tardes

tengo algunos problemas para implementar esto

he leido algunas rutinas para leer la cadena JSON, pero lo que no encuentro es ver la forma de abrir un archivo con informacion en formato JSON y parsearla

alguien me ayuda con esto?

basicamente es un archivo de texto (JSON) quiero parsearlo
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #2  
Antiguo 24-09-2020
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
ya pude hacerlo, abrir el archivo y lo puse en un Memo y de ahi lo parseo
pero tengo un problema con la estructura del JSON

al parecer hay 2 niveles

plain_orders_USER_mobile_number_13 -> identifica a la persona
products -> empieza el bloque de la informacion que necesito

la idea es que la persona, tiene un listado de productos para una fecha determinada

tengo este codigo

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
  JSo :  TJSONObject;
  JSOarray : TJSONArray;
  JSOValue: TJSONValue;
  remitente, destinatario, mensaje, estado : string;
begin
      JSOarray := TJSONObject.ParseJSONValue(Memo1.Text) as TJSONArray;
      for JSOValue in JSOarray do
      begin
        JSo := TJSONObject.ParseJSONValue(JSOValue.ToJSON) as TJSONObject;
        remitente :=  JSo.Values['category'].ToString;
        destinatario :=  JSo.Values['name'].ToString;
        Memo2.Lines.Add( remitente + '   ' + destinatario );  esto es para efectos de mostrar la informacion
      end;
end;


pero no me esta jalando la informacion porque al parecer no le estoy diciendo de donde sacarlo (Cliente), no se si alguien me puede entender
Cita:
[{
"plain_orders_USER_mobile_number_13": "3242342342342",
"products": [{
"category": "1",
"name": "Pollo broaster con ensalada de chucrut y arroz",
"Event-Time": "01\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "2",
"name": "patita con mani",
"Event-Time": "02\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "1",
"name": "Lentejas",
"Event-Time": "05\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "1",
"name": "Pollo a la olla con garbanzos y arroz",
"Event-Time": "06\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "2",
"name": "Tallarines Rojos",
"Event-Time": "07\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "2",
"name": "Hamburguesa de carne con quinua guisada y arroz",
"Event-Time": "08\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "1",
"name": "Milanesa de pescado con arvejita y arroz",
"Event-Time": "09\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "2",
"name": "Saltado de vainitas de pollo con papas fritas y arroz",
"Event-Time": "12\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "1",
"name": "Cerdo a la bbq con pur\u00e9 de papa y arroz",
"Event-Time": "13\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "2",
"name": "Tallar\u00edn saltado de res",
"Event-Time": "14\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "1",
"name": "Pechuguita de pollo al horno con lentejitas y arroz",
"Event-Time": "15\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "2",
"name": "Pollo al sillao con papa sancochada y arroz",
"Event-Time": "16\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "1",
"name": "Nuggets de pescado con locro de zapallo y arroz",
"Event-Time": "19\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "2",
"name": "Pavita al horno con ajiaco de papa",
"Event-Time": "20\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "1",
"name": "Tallarines a la bolognesa",
"Event-Time": "21\/10\/2020 (Hora De Almuerzo)"
}]
}, {
"plain_orders_USER_mobile_number_13": "",
"products": [{
"category": "1",
"name": "Pollo broaster con ensalada de chucrut y arroz",
"Event-Time": "01\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "2",
"name": "patita con mani",
"Event-Time": "02\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "1",
"name": "Lentejas",
"Event-Time": "05\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "1",
"name": "Pollo a la olla con garbanzos y arroz",
"Event-Time": "06\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "2",
"name": "Tallarines Rojos",
"Event-Time": "07\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "2",
"name": "Hamburguesa de carne con quinua guisada y arroz",
"Event-Time": "08\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "1",
"name": "Milanesa de pescado con arvejita y arroz",
"Event-Time": "09\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "2",
"name": "Saltado de vainitas de pollo con papas fritas y arroz",
"Event-Time": "12\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "1",
"name": "Cerdo a la bbq con pur\u00e9 de papa y arroz",
"Event-Time": "13\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "2",
"name": "Tallar\u00edn saltado de res",
"Event-Time": "14\/10\/2020 (Hora De Almuerzo)"
}]
}, {
"plain_orders_USER_mobile_number_13": "",
"products": [{
"category": "1",
"name": "Pollo broaster con ensalada de chucrut y arroz",
"Event-Time": "01\/10\/2020 (Hora De Almuerzo)"
}]
}, {
"plain_orders_USER_mobile_number_13": "",
"products": [{
"category": "1",
"name": "Ticket: Pollo broaster con ensalada de chucrut y arroz 2020\/10\/01 - 2020\/10\/01",
"Event-Time": "01\/10\/2020 (Hora De Almuerzo)"
}]
}, {
"plain_orders_USER_mobile_number_13": "",
"products": [{
"category": "2",
"name": "Ticket: Hamburguesa de carne con quinua guisada y arroz 2020\/10\/08 - 2020\/10\/08",
"Event-Time": "08\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "1",
"name": "Ticket: Pollo broaster con ensalada de chucrut y arroz 2020\/10\/01 - 2020\/10\/01",
"Event-Time": "01\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "2",
"name": "Ticket: Pollo broaster con ensalada de chucrut y arroz 2020\/10\/02 - 2020\/10\/02",
"Event-Time": "02\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "1",
"name": "Ticket: Lentejas 2020\/10\/05 - 2020\/10\/05",
"Event-Time": "05\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "1",
"name": "Ticket: Pollo a la olla con garbanzos y arroz 2020\/10\/06 - 2020\/10\/06",
"Event-Time": "06\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "2",
"name": "Ticket: Tallarines Rojos 2020\/10\/07 - 2020\/10\/07",
"Event-Time": "07\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "1",
"name": "Ticket: Milanesa de pescado con arvejita y arroz 2020\/10\/09 - 2020\/10\/09",
"Event-Time": "09\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "2",
"name": "Ticket: Saltado de vainitas de pollo con papas fritas y arroz 2020\/10\/12 - 2020\/10\/12",
"Event-Time": "12\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "1",
"name": "Ticket: Cerdo a la bbq con pur\u00e9 de papa y arroz 2020\/10\/13 - 2020\/10\/13",
"Event-Time": "13\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "2",
"name": "Ticket: Tallar\u00edn saltado de res 2020\/10\/14 - 2020\/10\/14",
"Event-Time": "14\/10\/2020 (Hora De Almuerzo)"
}, {
"category": "1",
"name": "Ticket: Pechuguita de pollo al horno con lentejitas y arroz 2020\/10\/15 - 2020\/10\/15",
"Event-Time": "15\/10\/2020 (Hora De Almuerzo)"
}]
}]
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #3  
Antiguo 24-09-2020
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
buenas tardes

como podria parsear un json con esta estructura

Cita:
[{
"plain_orders_USER_mobile_number_13": "3242342342342",
"products": [{
"category": "1",
"name": "Pollo broaster con ensalada de chucrut y arroz",
"Event-Time": "01\/10\/2020 (Hora De Almuerzo)"},
{
"category": "2",
"name": "patita con mani",
"Event-Time": "02\/10\/2020 (Hora De Almuerzo)"}]
}, {
"plain_orders_USER_mobile_number_13": "1234",
"products": [{
"category": "1",
"name": "Pollo broaster con ensalada de chucrut y arroz",
"Event-Time": "01\/10\/2020 (Hora De Almuerzo)"},
{
"category": "2",
"name": "patita con mani",
"Event-Time": "02\/10\/2020 (Hora De Almuerzo)"}]
}]

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
  JSo :  TJSONObject;
  JSOarray : TJSONArray;
  JSOValue: TJSONValue;
  remitente, destinatario, mensaje, estado : string;
begin
      JSOarray := TJSONObject.ParseJSONValue(Memo1.Text) as TJSONArray;
      for JSOValue in JSOarray do
      begin
        JSo := TJSONObject.ParseJSONValue(JSOValue.ToJSON) as TJSONObject;
        remitente :=  JSo.Values['category'].ToString;
        destinatario :=  JSo.Values['name'].ToString;
        Memo2.Lines.Add( remitente + '   ' + destinatario );  esto es para efectos de mostrar la informacion
      end;
end;


con este codigo puedo obtener los datos pero solo si el archivo fuera asi

Cita:

[{
"category": "1",
"name": "Pollo broaster con ensalada de chucrut y arroz",
"Event-Time": "01\/10\/2020 (Hora De Almuerzo)"},
}, {
"category": "1",
"name": "xxxxxxxxxxxxx",
"Event-Time": "01\/10\/2020 (Hora De Almuerzo)"},
}, {
"category": "1",
"name": "yyyyyyyyyyyyyyyyyyyyyy",
"Event-Time": "01\/10\/2020 (Hora De Almuerzo)"},
}]

me darias una mano con esto por favor?
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #4  
Antiguo 24-09-2020
engranaje engranaje is offline
Miembro
 
Registrado: may 2011
Posts: 163
Poder: 13
engranaje Va por buen camino
Disculpa, pregunto para tener claro si lo he entendido:


Tienes una lista de objetos "cliente".
Cada cliente a su vez tiene una lista de objetos productos.
Cada producto tiene a su vez una lista de clave-valor para categoría, nombre y hora.
Es decir por lo que veo en tu ejemplo el json que cargas te pueden venir n clientes con m productos cada uno.


¿Todo esto es cierto?
Responder Con Cita
  #5  
Antiguo 24-09-2020
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Debes acceder al contenido del array de productos

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
  i, j: Integer;
  MainArray: TJSONArray;
  MainItem: TJSONObject;
  Products: TJSONArray;
  ProdItem: TJSONObject;
begin
  MainArray := TJSONObject.ParseJSONValue(Memo1.Lines.Text) as TJSONArray;
  for i := 0 to MainArray.Count - 1 do
  begin
    MainItem := TJSONObject.ParseJSONValue(MainArray.Items[i].ToJSON) as TJSONObject;
    Memo2.Lines.Add(Format('%d - plain_orders_USER_mobile_number_13: ',
      [i+1, MainItem.Values['plain_orders_USER_mobile_number_13'].ToString]));

    if Assigned(MainItem.GetValue('products')) then
    begin
      Products := MainItem.GetValue('products') as TJSONArray;
      for j := 0 to Products.count - 1 do
      begin
        ProdItem := TJSONObject.ParseJSONValue(Products.Items[j].ToJSON) as TJSONObject;
        Memo2.Lines.Add(Format('Product: %d:%d - Category: %s - Name: %s - Event-Time: %s',
          [i+1, j+1, ProdItem.Values['category'].ToString, ProdItem.Values['name'].ToString,
           ProdItem.Values['Event-Time'].ToString]));
      end;
    end;
  end;
end;
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #6  
Antiguo 25-09-2020
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Cita:
Empezado por movorack Ver Mensaje
Debes acceder al contenido del array de productos

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
  i, j: Integer;
  MainArray: TJSONArray;
  MainItem: TJSONObject;
  Products: TJSONArray;
  ProdItem: TJSONObject;
begin
  MainArray := TJSONObject.ParseJSONValue(Memo1.Lines.Text) as TJSONArray;
  for i := 0 to MainArray.Count - 1 do
  begin
    MainItem := TJSONObject.ParseJSONValue(MainArray.Items[i].ToJSON) as TJSONObject;
    Memo2.Lines.Add(Format('%d - plain_orders_USER_mobile_number_13: ',
      [i+1, MainItem.Values['plain_orders_USER_mobile_number_13'].ToString]));

    if Assigned(MainItem.GetValue('products')) then
    begin
      Products := MainItem.GetValue('products') as TJSONArray;
      for j := 0 to Products.count - 1 do
      begin
        ProdItem := TJSONObject.ParseJSONValue(Products.Items[j].ToJSON) as TJSONObject;
        Memo2.Lines.Add(Format('Product: %d:%d - Category: %s - Name: %s - Event-Time: %s',
          [i+1, j+1, ProdItem.Values['category'].ToString, ProdItem.Values['name'].ToString,
           ProdItem.Values['Event-Time'].ToString]));
      end;
    end;
  end;
end;
movorack, simplemente me salvaste la vida....

pero hay algo que me falta

tengo que capturar el dato del cliente, por ejemplo en la primera linea el dato a obtener es. "3242342342342"

muchas gracias
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #7  
Antiguo 25-09-2020
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Cita:
Empezado por engranaje Ver Mensaje
Disculpa, pregunto para tener claro si lo he entendido:


Tienes una lista de objetos "cliente".
Cada cliente a su vez tiene una lista de objetos productos.
Cada producto tiene a su vez una lista de clave-valor para categoría, nombre y hora.
Es decir por lo que veo en tu ejemplo el json que cargas te pueden venir n clientes con m productos cada uno.


¿Todo esto es cierto?
asi es

existe un cliente, dentro un identificador de productos y dentro la relacion de fechas, productos y categorias
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #8  
Antiguo 25-09-2020
engranaje engranaje is offline
Miembro
 
Registrado: may 2011
Posts: 163
Poder: 13
engranaje Va por buen camino
Cita:
Empezado por oscarac Ver Mensaje
movorack, simplemente me salvaste la vida....

pero hay algo que me falta

tengo que capturar el dato del cliente, por ejemplo en la primera linea el dato a obtener es. "3242342342342"

muchas gracias
Diría que movorack ya te ha contestado pero es posible que faltara solo un detalle:
Código Delphi [-]
Memo2.Lines.Add(Format('%d - plain_orders_USER_mobile_number_13: %s',        
[i+1, MainItem.Values['plain_orders_USER_mobile_number_13'].ToString]));

Última edición por engranaje fecha: 25-09-2020 a las 09:57:24.
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 estructura JSON pepesoft Internet 2 07-08-2020 11:47:21
Leer fichero JSON Yulexis Varios 10 23-01-2019 14:54:58
Leer JSON sin nombre Ramsay Varios 2 27-09-2016 14:52:52
Leer archivo XLS toni.vi Servers 0 14-05-2012 15:36:22
leer archivo log Producto77 Varios 1 24-03-2009 16:48:21


La franja horaria es GMT +2. Ahora son las 11:18:39.


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