Closed voxsoftware closed 1 year ago
Thanks!
Ahorita lo que me preocupa es que si el JSON incluye una propiedad item, entonces el método item
se oculta (en arrays obviamente esto no pasaría). Así que no sé si sería bueno añadir adicionalmente el mismo método item que acabo de poner con otro nombre más único, tal vez __item
para en casos donde el método item
esté oculto, y haya que acceder a propiedades raras como ejemplo propiedades con espacio o caracteres no válidos en VFP.
Me explico ejemplo:
JSON.parse('{"item": {"count": 1}, "$order": 1}')
* mostraría objeto
?m.result.item
* mostraría 1
?m.result.item .count
* syntax error
?m.result.$order
* error porque el método item quedaría oculto en este ejemplo
?m.result.item["$order"]
El escenario anterior podría solucionarse añadiendo un método más que funcione exactamente igual pero con un nombre menos común como __item
JSON.parse('{"item": {"count": 1}, "$order": 1}')
* mostraría: 1
?m.result.__item["$order"]
¿Qué opina?
Por eso decia en el grupo que la mejor solucion en mi opinion es normalizar los resultados, de modo que aun usando el fastParsing, el resultado sea un objeto fox, usando colecciones para los arrays. Estamos claros que hay casos de casos, y no es el objetivo de esta libreria ser capaz de manejar CUALQUIER string JSON, sobre todo los generados desde JS, sino que funcione con los casos de uso mas comunes en escenarios reales (intercambio de datos entre nuestro codigo fox y un backend REST).
@vespina Pero si solo importa los array, con mi solución no hay ningún inconveniente. En los array se puede usar el método item
actualmente sin ninguna desventaja. Lo que yo expuse es para objetos, así que si tu interés es solo por array, como mandé el pull funciona sin problemas.
De todos modos después de analizar pros y contras, encontré una mejor solución para el caso de objetos. Te haré otro pull request.
Puedo hacer que el método item
tenga mayor relevancia que una propiedad item. De ese modo el método siempre está disponible, y no se oculta bajo ningún caso, aún cuando se parsea un objeto que tenga la propiedad item. Si en un código específico se necesita acceder a una propiedad item
, entonces se necesitaría usar el método item
:
result = JSON.parse('{"item": {"count": 1}, "nums":[1000,2000],"$order": 1}')
* acceder a la propiedad item
?m.result.item["item"]
* mostraría 1
?m.result.item["item"].count
* acceder a propiedades no válidas en VFP
?m.result.item["$order"]
* los arrays se pueden acceder también con item (mostraría 1000)
?m.result.nums.item[0]
y adicional a mi comentario anterior, yo pienso que añadir la lógica de crear objetos directamente en VFP, quitaría los beneficios de rendimiento, por eso estoy haciendo el código para resolverlo directamente desde código javascript. De todas formas si prefiere puede poner eso como un parámetro adicional, si el usuario desea usar el creador de objetos nativos.
This allow get non-valid properties from VFP, or access easy to any array from VFP.
Example: