jsonfox

489 views
Skip to first unread message

Roberto Leandro

unread,
Jul 30, 2020, 4:44:53 PM7/30/20
to publice...@googlegroups.com
Hola colegas, estoy probando las rutinas del maestro Irwin, pero se nota que me falta mucho aun con el tema de las apirest, json, etc
tengo el siguiente string en una variable que pude hacer q me devuelva la pagina con las apirest, con esa variable quiero saber si con la libreria de irwin puedo pasarla a un cursor.
Al ejecutar este codigo me da error , interpreto como que esta demas el corchete, pero lo probe tb sacandolo

Saludos



&&// Create Object
clear
 Public Rest,lojason
&& Set Procedure To \visual\apirest\VFPRestClient.prg Additive
 Rest = NewObject("Rest", "h:\visual\apirest\VFPRestClient.prg")
 DO h:\visual\apirest\jsonfox.app
 
 SET PRINTER off
 SET PRINTER TO
 SET PRINTER TO c:\visual\apirest.txt
 SET PRINTER ON
 
TEXT TO cTexto NOSHOW
[{"Id":9734,"Ids":"#0000##9734#","ItemType":4,"Na
me":"prueba","Description":"tyrt","Index":"prueba"
,"Indexes":"prueba","Text":null,"Keywords":"yutr",
"SiteId":0,"CreatorId":9,"ModificatorId":9,"Code":
"767657657676","CreationDate":"2020-06-28T14:58:
12.383","ModificationDate":"2020-06-28T14:58:12.3
83","PublishingStatus":0,"AllPublishingStatus":nul
l,"DefaultPrice":6.00,"DefaultStock":1,"ReferenceI
d":null,"DiscountMultiplier":null,"ForSale":false,
"Vigency":false,"VigencyFrom":"2020-06-28T14:58:
12.6","VigencyTo":"2020-06-28T14:58:12.6","MetaD
escription":"tyrt","MetaTitle":"prueba","MetaKeywo
rds":"yutr","MetaLang":"","MetaAuthor":"","Author"
:"","AutoMeta":true,"ParentId":0,"Weight":31,"Weig
hts":"0031\u0000","Brand":"","UseRefPictures":fals
e,"Manufacturer":null,"Depth":0,"IsRepository":fal
se,"Tags":null,"CustomDate":"2020-06-28T14:58:12.
6","IncludeOnRss":true,"IncludeOnSitemap":true,"C
urrencyId":null,"PriceListId":0,"AppendControls":n
ull,"ContentOrder":0,"ContentDisplay":0,"ContentSo
rt":true,"ContentRecsPerPage":0,"ItemFilters":null
,"PriceMode":0,"FilterGroup":0,"Sync":true,"Discou
nt":0.00,"DiscountMode":0,"Currency":null,"Images"
:[],"ExtendedWarranty":[],"Additionals":[],"Filter
s":[],"Properties":[],"DesignProperties":[],"Defau
ltPrices":null,"Callout":[],"DefaultMinStock":0,"B
oxWeight":null,"BoxHeight":null,"BoxWidth":null,"B
oxLength":null,"WeightUnits":null,"LengthUnits":nu
ll,"DefaultOfferPrice":6.00,"FreeShipping":false,"
PriceMultiplier":1,"UnitsMultiplier":1,"Taxes":nul
l,"IsCombo":false,"ItemDiscounts":[],"SyncPrice":f
alse},{"Id":9736,"Ids":"#0000##9736#","ItemType":4
,"Name":"prueba2","Description":"prueba
interface","Index":"prueba2","Indexes":"prueba2","
Text":null,"Keywords":" prueba2
05606001","SiteId":0,"CreatorId":9,"ModificatorId"
:9,"Code":"05606001","CreationDate":"2020-07-20T
13:31:50.983","ModificationDate":"2020-07-20T13:3
1:50.983","PublishingStatus":0,"AllPublishingStatu
s":null,"DefaultPrice":0.00,"DefaultStock":-1,"Ref
erenceId":null,"DiscountMultiplier":null,"ForSale"
:true,"Vigency":false,"VigencyFrom":"2020-07-20T1
3:31:51.233","VigencyTo":"2020-07-20T13:31:51.23
3","MetaDescription":"prueba
interface","MetaTitle":"prueba2","MetaKeywords":""
,"MetaLang":"","MetaAuthor":"","Author":"","AutoMe
ta":true,"ParentId":0,"Weight":32,"Weights":"0032\
u0000","Brand":"","UseRefPictures":false,"Manufact
urer":null,"Depth":0,"IsRepository":false,"Tags":n
ull,"CustomDate":"2020-07-20T13:31:51.233","Inclu
deOnRss":true,"IncludeOnSitemap":true,"CurrencyI
d":null,"PriceListId":0,"AppendControls":null,"Con
tentOrder":0,"ContentDisplay":0,"ContentSort":true
,"ContentRecsPerPage":0,"ItemFilters":null,"PriceM
ode":0,"FilterGroup":0,"Sync":true,"Discount":0.00
,"DiscountMode":0,"Currency":null,"Images":[],"Ext
endedWarranty":[],"Additionals":[],"Filters":[],"P
roperties":[],"DesignProperties":[],"DefaultPrices
":null,"Callout":[],"DefaultMinStock":0,"BoxWeight
":null,"BoxHeight":null,"BoxWidth":null,"BoxLength
":null,"WeightUnits":null,"LengthUnits":null,"Defa
ultOfferPrice":0.00,"FreeShipping":false,"PriceMul
tiplier":1,"UnitsMultiplier":1,"Taxes":null,"IsCom
bo":false,"ItemDiscounts":[],"SyncPrice":false}]
ENDTEXT


obj = _Screen.Json.Parse(cTexto)
 
 * Don't forget check the LastErrorText
 If _Screen.Json.lError
   MessageBox(_Screen.Json.LastErrorText, 48, "Something went wrong")
   Return
 EndIf
 

?_Screen.Json.Stringify(cTexto)
* Don't forget check the LastErrorText
If _Screen.Json.lError
  MessageBox(_Screen.Json.LastErrorText, 48, "Something went wrong")
  Return
EndIf    


SET PRINT off
SET PRINTER TO
 
Release Rest





Irwin Rodriguez

unread,
Jul 30, 2020, 6:09:30 PM7/30/20
to publice...@googlegroups.com
Hola Roberto, gracias a tu ejemplo me he dado cuenta de 2 problemas:

1. Reconocimiento de números negativos
2. Creación de arrays vacíos.

Puedes descargar la actualización desde el repositorio: https://github.com/Irwin1985/JSONFox

Ahora hablando del tema de conversión de JSON a Cursor: una condición importante es que tu JSON debe ser un array de objetos ya que esa estructura es la compatible con las tablas / cursores, por lo tanto debes proporcionar a la función JSONToCursor() una cadena que cumpla con la siguiente estructura:

   {
      key: value
   }
]

por supuesto pueden repetirse tanto los objetos '{}' como sus pares 'key:value'

En tu caso tienes arrays anidados y eso no es compatible con un cursor. 

Espero haberte ayudado.

Saludos!


--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/CABpV7JJTu0RUtdR2OahT_Wam%2BCJKhpixU4fvnr0HxzD%2BT-SGLA%40mail.gmail.com.

Roberto Leandro

unread,
Aug 1, 2020, 12:09:52 AM8/1/20
to publice...@googlegroups.com
Hola estimado, gracias por tu respuesta, voy a probar los cambios de tu libreria.Con respecto al string que estoy trantando, mucho no puedo hacer x q es una pagina de una empresa tercerizada que  a traves de tus rutinas apirest me devuelve este dato, en este caso es una plataforma de prueba y solo hay cargado dos articulos.
Mi tarea es hacer que desde mi sistema mantener actualizada la pagina de ventas online , los precios y que articulos estan o no disponibles para la venta de acuerdo a las existencias
Hasta hace poco estabamos con otra empresa que lo tenian desarrollado en magento y habia otra interface
Saludos

Irwin Rodriguez

unread,
Aug 1, 2020, 7:24:01 AM8/1/20
to publice...@googlegroups.com
Hola Roberto, entonces en tu caso mejor crea y llena el cursor a mano:

obj = _Screen.Json.Parse(lcJSONStr)
Create Cursor datos (id i, ids c(20), name c(25), description c(70)) // etc
For each loData in obj.data
  Insert into datos values (loData.id, loData.ids, loData.name, loData.description)
EndFor
browse

En caso que necesites los cursores de los arrays anidados entonces debes crear un cursor con el campo en común (id ?) y hacer un nuevo for para cada array.
Saludos!

Roberto Leandro

unread,
Aug 1, 2020, 8:31:00 PM8/1/20
to publice...@googlegroups.com
Hola, probe la instruccion

obj = _Screen.Json.Parse(lcJSONStr)
pero no me crea el objeto, me da error en la siguiente linea de que no existe obj , no se cual sera el motivo

El ejemplo completo lo adjunto como prueba6.prg (No funciona) , adjunto otro prueba5.prg que si funciona


Saludos!
prueba6.prg
prueba5.prg

Irwin Rodriguez

unread,
Aug 2, 2020, 5:18:44 AM8/2/20
to publice...@googlegroups.com
Hola Roberto, te adjunto el mismo prueba5.prg funcionando con la librería JSONFox, he notado que estás mezclando la nfJson de Marcos junto con la mía, he ahí tu enredo. 

Saludos!

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
prueba5.prg

Roberto Leandro

unread,
Aug 2, 2020, 8:45:20 PM8/2/20
to publice...@googlegroups.com
ahora lo pruebo, muchas gracias por tomarte el trabajo, realmente agradecido

Roberto Leandro

unread,
Aug 2, 2020, 8:49:59 PM8/2/20
to publice...@googlegroups.com
funciona perfecto, muchas gracias, a seguir investigando para subir los cambios


El dom., 2 de ago. de 2020 a la(s) 06:18, Irwin Rodriguez (rodrigu...@gmail.com) escribió:

HernanCano

unread,
Aug 7, 2020, 4:01:11 PM8/7/20
to Comunidad de Visual Foxpro en Español
Roberto:
He encontrado un inconveniente en la cadena JSON que pones en el ejemplo.

El dato Weights tiene \u lo cual hace fallar a la rutina JSONFox de Irwin: termina en ese campo, quiero decir no muestra más datos (los que siguen), al menos en mi escenario.
Esto sucede en ambos registros (¿tienes dos registros en lo que muestras?).

De momento para probar el JSONFox.app de Irwin lo que hago es editar la cadena quitándole el backslash y la u, y ya muestra los dos registros.

Sería bueno que verificaras (preguntar a quien te envía ese dato --¿documentación del servicio web? del API REST?--). O bien podrías cambiarlo por otro caracter (o suprimirlo si es que es posible) mientras haces el resto de procesos con _Screen.JSON.

Roberto: ¿qué importancia tiene el caracter \u en el campos Weights del JSON que nos muestras?

Oscar David Gonzalez Rodriguez

unread,
Oct 11, 2022, 9:06:16 AM10/11/22
to Comunidad de Visual Foxpro en Español
Buenos dias de antemano mil gracias por su colaboracion genere un proceso para enviar documentos soporte con la libreria del maestro Irwin adjunto  el prg docsoporteenvio en la maquina de desarollo me genera bienn el json y consume el webservice pero en el cliente que tengo la misma version de jsonfox.app  el cliente tiene window server 2019 todo lo demas me funciona

Quien me puede colaborar que estas pasando les agradezco
DocsoporteDS1SERVER.json
DocsoporteDS1Cliente.json
DocSoporteEnviar.prg
Reply all
Reply to author
Forward
0 new messages