FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Como convertir un Json a Hash? (SOLUCIONADO)
Posts: 476
Joined: Sat Feb 03, 2007 06:36 AM
Como convertir un Json a Hash? (SOLUCIONADO)
Posted: Thu Oct 27, 2022 11:27 PM
Hola a todos.
Tengo este Json que recibo de un Api Rest
Code (fw): Select all Collapse
{"order": {"id": "196", "nit": null, "name": "Jhonatan Valero", "email": "jhonatan.valero@omni.pro", "items": [{"sku": "MUR0491", "name": "Block Tapado Liviano de 14 de 14x19x39cm (UN) 25kg/cmu00b2", "price": 3.09, "seller": "", "source": "Aceros de Guatemala", "quantity": 14, "entity_id": "235", "total_price": 43.26, "order_item_id": "301", "shipping_method": "Entrega por un tercero"}, {"sku": "MUR0491", "name": "Block Tapado Liviano de 14 de 14x19x39cm (UN) 25kg/cmu00b2", "price": 3.09, "seller": "", "source": "Aceros de Guatemala", "quantity": 13, "entity_id": "235", "total_price": 40.17, "order_item_id": "302", "shipping_method": "Retiro en tienda"}, {"sku": "MUR0491", "name": "Block Tapado Liviano de 14 de 14x19x39cm (UN) 25kg/cmu00b2", "price": 3.09, "seller": "", "source": "Tiendas Super", "quantity": 5, "entity_id": "235", "total_price": 15.45, "order_item_id": "303", "shipping_method": "Retiro en tienda"}], "created_at": "2022-10-20 22:09:00", "customer_id": "112", "person_type": 0, "increment_id": "4000000196", "legalAddress": {"city": null, "region": "Alta Verapaz", "street": "Cll 100", "country": "GT", "zip_code": "16013", "telephone": "31264587", "municipality": "Chisec"}, "razon_social": "Mi empresa", "taxes_amount": 0, "total_amount": 98.88, "payment_method": "banktransfer", "discount_amount": 0, "shippingAddress": {"city": null, "name": "Jhonatan 2", "region": "Chimaltenango", "street": "Cll 102", "country": "GT", "zip_code": "16013", "telephone": "31264587", "municipality": "Chimaltenango"}, "shipping_amount": 0, "nombre_comercial": "Mi empresa", "nombre_propietario": " ", "representante_legal":聽"聽"}}
Y estoy intentando encontrar sus valores, por lo que he probado convertirlo a Hash, pero no logro obtener ningun valor.
He probado de esta forma:
Code (fw): Select all Collapse
TEXT INTO cJs
{"order": {"id": "196", "nit": null, "name": "Jhonatan Valero", "email": "jhonatan.valero@omni.pro", "items": [{"sku": "MUR0491", "name": "Block Tapado Liviano de 14 de 14x19x39cm (UN) 25kg/cmu00b2", "price": 3.09, "seller": "", "source": "Aceros de Guatemala", "quantity": 14, "entity_id": "235", "total_price": 43.26, "order_item_id": "301", "shipping_method": "Entrega por un tercero"}, {"sku": "MUR0491", "name": "Block Tapado Liviano de 14 de 14x19x39cm (UN) 25kg/cmu00b2", "price": 3.09, "seller": "", "source": "Aceros de Guatemala", "quantity": 13, "entity_id": "235", "total_price": 40.17, "order_item_id": "302", "shipping_method": "Retiro en tienda"}, {"sku": "MUR0491", "name": "Block Tapado Liviano de 14 de 14x19x39cm (UN) 25kg/cmu00b2", "price": 3.09, "seller": "", "source": "Tiendas Super", "quantity": 5, "entity_id": "235", "total_price": 15.45, "order_item_id": "303", "shipping_method": "Retiro en tienda"}], "created_at": "2022-10-20 22:09:00", "customer_id": "112", "person_type": 0, "increment_id": "4000000196", "legalAddress": {"city": null, "region": "Alta Verapaz", "street": "Cll 100", "country": "GT", "zip_code": "16013", "telephone": "31264587", "municipality": "Chisec"}, "razon_social": "Mi empresa", "taxes_amount": 0, "total_amount": 98.88, "payment_method": "banktransfer", "discount_amount": 0, "shippingAddress": {"city": null, "name": "Jhonatan 2", "region": "Chimaltenango", "street": "Cll 102", "country": "GT", "zip_code": "16013", "telephone": "31264587", "municipality": "Chimaltenango"}, "shipping_amount": 0, "nombre_comercial": "Mi empresa", "nombre_propietario": " ", "representante_legal":聽"聽"}}
ENDTEXT

cHs:={=>}
hb_jsonDecode(cJs,@cHs)
? 聽cHs['order']['id']
Y me da: Error BASE/1132 Error de rango: acceso al array

O bien:
Code (fw): Select all Collapse
TEXT INTO cJs
{"order": {"id": "196", "nit": null, "name": "Jhonatan Valero", "email": "jhonatan.valero@omni.pro", "items": [{"sku": "MUR0491", "name": "Block Tapado Liviano de 14 de 14x19x39cm (UN) 25kg/cmu00b2", "price": 3.09, "seller": "", "source": "Aceros de Guatemala", "quantity": 14, "entity_id": "235", "total_price": 43.26, "order_item_id": "301", "shipping_method": "Entrega por un tercero"}, {"sku": "MUR0491", "name": "Block Tapado Liviano de 14 de 14x19x39cm (UN) 25kg/cmu00b2", "price": 3.09, "seller": "", "source": "Aceros de Guatemala", "quantity": 13, "entity_id": "235", "total_price": 40.17, "order_item_id": "302", "shipping_method": "Retiro en tienda"}, {"sku": "MUR0491", "name": "Block Tapado Liviano de 14 de 14x19x39cm (UN) 25kg/cmu00b2", "price": 3.09, "seller": "", "source": "Tiendas Super", "quantity": 5, "entity_id": "235", "total_price": 15.45, "order_item_id": "303", "shipping_method": "Retiro en tienda"}], "created_at": "2022-10-20 22:09:00", "customer_id": "112", "person_type": 0, "increment_id": "4000000196", "legalAddress": {"city": null, "region": "Alta Verapaz", "street": "Cll 100", "country": "GT", "zip_code": "16013", "telephone": "31264587", "municipality": "Chisec"}, "razon_social": "Mi empresa", "taxes_amount": 0, "total_amount": 98.88, "payment_method": "banktransfer", "discount_amount": 0, "shippingAddress": {"city": null, "name": "Jhonatan 2", "region": "Chimaltenango", "street": "Cll 102", "country": "GT", "zip_code": "16013", "telephone": "31264587", "municipality": "Chimaltenango"}, "shipping_amount": 0, "nombre_comercial": "Mi empresa", "nombre_propietario": " ", "representante_legal":聽"聽"}}
ENDTEXT

cHs:={=>}
hb_jsonDecode(cJs,@cHs)
xbrowse( cHs )
No obtengo nigun valor con xBrowse()

Alguien me puede indicar como puedo tratar este JSon por favor?

Saludos cordiales.

Carlos
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Como convertir un Json a Hash?
Posted: Fri Oct 28, 2022 01:01 AM
Posts: 476
Joined: Sat Feb 03, 2007 06:36 AM
Re: Como convertir un Json a Hash?
Posted: Fri Oct 28, 2022 03:32 AM

Cesar, gracias por contestar, pero, tambien ya he usado hb_jsonDecode, pero ac谩 me convierte el Json en una cadena con slashes \ nada mas.

Saludos

Posts: 476
Joined: Sat Feb 03, 2007 06:36 AM
Re: Como convertir un Json a Hash?
Posted: Fri Oct 28, 2022 03:38 AM
Tal ves mi pregunta esta mal hecha.
Code (fw): Select all Collapse
cHs:={=>}
hb_jsonDecode(cJs,@cHs)
? ValType( cHs )
La funci贸n hb_jsonDecode() si me convierte el Json a Hash, ya que ValType(cHs) me devuelve "H", por lo que la pregunta ser铆a, como hago ahora para obtener los datos del Hash generado?
ya que cHs['order']['id'], me da Error de rango: acceso al array

Saludos

Carlos
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Como convertir un Json a Hash?
Posted: Fri Oct 28, 2022 03:41 AM
Carlos, mira a ver si asi lo ves m谩s claro
Code (fw): Select all Collapse
#include "Fivewin.ch"

Function Main()

聽 聽local hJs
聽 聽local cJs

聽 聽TEXT INTO cJs
聽 聽{"order": {"id": "196", "nit": null, "name": "Jhonatan Valero", "email": "jhonatan.valero@omni.pro", "items": [{"sku": "MUR0491", "name": "Block Tapado Liviano de 14 de 14x19x39cm (UN) 25kg/cmu00b2", "price": 3.09, "seller": "", "source": "Aceros de Guatemala", "quantity": 14, "entity_id": "235", "total_price": 43.26, "order_item_id": "301", "shipping_method": "Entrega por un tercero"}, {"sku": "MUR0491", "name": "Block Tapado Liviano de 14 de 14x19x39cm (UN) 25kg/cmu00b2", "price": 3.09, "seller": "", "source": "Aceros de Guatemala", "quantity": 13, "entity_id": "235", "total_price": 40.17, "order_item_id": "302", "shipping_method": "Retiro en tienda"}, {"sku": "MUR0491", "name": "Block Tapado Liviano de 14 de 14x19x39cm (UN) 25kg/cmu00b2", "price": 3.09, "seller": "", "source": "Tiendas Super", "quantity": 5, "entity_id": "235", "total_price": 15.45, "order_item_id": "303", "shipping_method": "Retiro en tienda"}], "created_at": "2022-10-20 22:09:00", "customer_id": "112", "person_type": 0, "increment_id" 聽 聽: "4000000196", "legalAddress": {"city": null, "region": "Alta Verapaz", "street": "Cll 100", "country": "GT", "zip_code": "16013", "telephone": "31264587", "municipality": "Chisec"}, "razon_social": "Mi empresa", "taxes_amount": 0, "total_amount": 98.88, "payment_method": "banktransfer", "discount_amount": 0, "shippingAddress": {"city": null, "name": "Jhonatan 2", "region": "Chimaltenango", "street": "Cll 102", "country": "GT", "zip_code": "16013", "telephone": "31264587", "municipality": "Chimaltenango"}, "shipping_amount": 0, "nombre_comercial": "Mi empresa", "nombre_propietario": " ", "representante_legal": " "}}
聽 聽ENDTEXT

聽 聽cJs := StrTran( cJs, '{"order": ', "" )
聽 聽cJs := Left( cJs, Len( cJs ) - 2 )
聽 聽? cJs
聽 聽hb_JsonDecode( cJs, @hJs )

聽 聽XBrowse( hJs )

Return nil
Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noci贸n del tiempo

El secreto de la felicidad no est谩 en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Como convertir un Json a Hash?
Posted: Fri Oct 28, 2022 03:47 AM
csincuir wrote:Tal ves mi pregunta esta mal hecha.
Code (fw): Select all Collapse
cHs:={=>}
hb_jsonDecode(cJs,@cHs)
? ValType( cHs )
La funci贸n hb_jsonDecode() si me convierte el Json a Hash, ya que ValType(cHs) me devuelve "H", por lo que la pregunta ser铆a, como hago ahora para obtener los datos del Hash generado?
ya que cHs['order']['id'], me da Error de rango: acceso al array

Saludos

Carlos
Asi:
? hJs[ "razon_social" ]
Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noci贸n del tiempo

El secreto de la felicidad no est谩 en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 476
Joined: Sat Feb 03, 2007 06:36 AM
Re: Como convertir un Json a Hash?
Posted: Fri Oct 28, 2022 04:03 AM
Cristobal, eres un genio.
Estas lineas:
Code (fw): Select all Collapse
 
cJs := StrTran( cJs, '{"order": ', "" )
cJs := Left( cJs, Len( cJs ) - 2 )
hicieron la magia:
Code (fw): Select all Collapse
聽 聽cJs := StrTran( cJs, '{"order": ', "" )
聽 聽cJs := Left( cJs, Len( cJs ) - 2 )
聽 聽//? cJs
聽 聽hb_JsonDecode( cJs, @hJs )

聽 //Aca obtengo ya los datos del Json
聽 聽? hJs["id"]
聽 聽? hJs["items"][1]["sku"]
Muchas gracias por tu ayuda.

Saludos cordiales.

Carlos.
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Como convertir un Json a Hash?
Posted: Fri Oct 28, 2022 10:20 AM
Carlos, tambi茅n podr铆a hacerse asi
Code (fw): Select all Collapse
#include "Fivewin.ch"

Function Main()

聽 聽local hJs
聽 聽local cJs

聽 聽TEXT INTO cJs
聽 聽{"order": {"id": "196", "nit": null, "name": "Jhonatan Valero", "email": "jhonatan.valero@omni.pro", "items": [{"sku": "MUR0491", "name": "Block Tapado Liviano de 14 de 14x19x39cm (UN) 25kg/cmu00b2", "price": 3.09, "seller": "", "source": "Aceros de Guatemala", "quantity": 14, "entity_id": "235", "total_price": 43.26, "order_item_id": "301", "shipping_method": "Entrega por un tercero"}, {"sku": "MUR0491", "name": "Block Tapado Liviano de 14 de 14x19x39cm (UN) 25kg/cmu00b2", "price": 3.09, "seller": "", "source": "Aceros de Guatemala", "quantity": 13, "entity_id": "235", "total_price": 40.17, "order_item_id": "302", "shipping_method": "Retiro en tienda"}, {"sku": "MUR0491", "name": "Block Tapado Liviano de 14 de 14x19x39cm (UN) 25kg/cmu00b2", "price": 3.09, "seller": "", "source": "Tiendas Super", "quantity": 5, "entity_id": "235", "total_price": 15.45, "order_item_id": "303", "shipping_method": "Retiro en tienda"}], "created_at": "2022-10-20 22:09:00", "customer_id": "112", "person_type": 0, "increment_id" 聽 聽: "4000000196", "legalAddress": {"city": null, "region": "Alta Verapaz", "street": "Cll 100", "country": "GT", "zip_code": "16013", "telephone": "31264587", "municipality": "Chisec"}, "razon_social": "Mi empresa", "taxes_amount": 0, "total_amount": 98.88, "payment_method": "banktransfer", "discount_amount": 0, "shippingAddress": {"city": null, "name": "Jhonatan 2", "region": "Chimaltenango", "street": "Cll 102", "country": "GT", "zip_code": "16013", "telephone": "31264587", "municipality": "Chimaltenango"}, "shipping_amount": 0, "nombre_comercial": "Mi empresa", "nombre_propietario": " ", "representante_legal": " "}}
聽 聽ENDTEXT
/*
聽 聽cJs := StrTran( cJs, '{"order": ', "" )
聽 聽cJs := Left( cJs, Len( cJs ) - 2 )
聽 聽? cJs
*/
聽 聽hb_JsonDecode( cJs, @hJs )
聽 聽? hJs[ "order" ][ "razon_social" ]

聽 聽XBrowse( hJs )

Return nil
Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noci贸n del tiempo

El secreto de la felicidad no est谩 en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 476
Joined: Sat Feb 03, 2007 06:36 AM
Re: Como convertir un Json a Hash?
Posted: Fri Oct 28, 2022 12:56 PM
cnavarro wrote:Carlos, tambi茅n podr铆a hacerse asi
Code (fw): Select all Collapse
#include "Fivewin.ch"

Function Main()

聽 聽local hJs
聽 聽local cJs

聽 聽TEXT INTO cJs
聽 聽{"order": {"id": "196", "nit": null, "name": "Jhonatan Valero", "email": "jhonatan.valero@omni.pro", "items": [{"sku": "MUR0491", "name": "Block Tapado Liviano de 14 de 14x19x39cm (UN) 25kg/cmu00b2", "price": 3.09, "seller": "", "source": "Aceros de Guatemala", "quantity": 14, "entity_id": "235", "total_price": 43.26, "order_item_id": "301", "shipping_method": "Entrega por un tercero"}, {"sku": "MUR0491", "name": "Block Tapado Liviano de 14 de 14x19x39cm (UN) 25kg/cmu00b2", "price": 3.09, "seller": "", "source": "Aceros de Guatemala", "quantity": 13, "entity_id": "235", "total_price": 40.17, "order_item_id": "302", "shipping_method": "Retiro en tienda"}, {"sku": "MUR0491", "name": "Block Tapado Liviano de 14 de 14x19x39cm (UN) 25kg/cmu00b2", "price": 3.09, "seller": "", "source": "Tiendas Super", "quantity": 5, "entity_id": "235", "total_price": 15.45, "order_item_id": "303", "shipping_method": "Retiro en tienda"}], "created_at": "2022-10-20 22:09:00", "customer_id": "112", "person_type": 0, "increment_id" 聽 聽: "4000000196", "legalAddress": {"city": null, "region": "Alta Verapaz", "street": "Cll 100", "country": "GT", "zip_code": "16013", "telephone": "31264587", "municipality": "Chisec"}, "razon_social": "Mi empresa", "taxes_amount": 0, "total_amount": 98.88, "payment_method": "banktransfer", "discount_amount": 0, "shippingAddress": {"city": null, "name": "Jhonatan 2", "region": "Chimaltenango", "street": "Cll 102", "country": "GT", "zip_code": "16013", "telephone": "31264587", "municipality": "Chimaltenango"}, "shipping_amount": 0, "nombre_comercial": "Mi empresa", "nombre_propietario": " ", "representante_legal": " "}}
聽 聽ENDTEXT
/*
聽 聽cJs := StrTran( cJs, '{"order": ', "" )
聽 聽cJs := Left( cJs, Len( cJs ) - 2 )
聽 聽? cJs
*/
聽 聽hb_JsonDecode( cJs, @hJs )
聽 聽? hJs[ "order" ][ "razon_social" ]

聽 聽XBrowse( hJs )

Return nil
Cristobal, de esa forma lo estaba haciendo al inicio, pero como comentaba da Error BASE/1132 Error de rango: acceso al array, al intentar 聽hacer esto: ? hJs[ "order" ][ "razon_social" ]
Y el XBrowse( hJs ) sale en blanco

Pero usando estas dos lineas que me enviaste, todo funciona correctamente.
Code (fw): Select all Collapse
cJs := StrTran( cJs, '{"order": ', "" )
cJs := Left( cJs, Len( cJs ) - 2 )
Saludos cordiales.

Carlos

Continue the discussion