¿Cómo puedo analizar JSON en solidez?
La idea es tener una función o similar que pueda analizar JSON dentro de un contrato de Solidity.
Con un objeto JSON simple (solo cadenas de valores clave, como {'A': 'a', 'B': 'b'}
), la solución debería poder transformarlo en una asignación (cadena => cadena).
Asumiré que desea llamar a una fuente externa sobre la cual no puede tener control y que usa la fuente de datos json() Oraclize para obtener solo la parte correcta del servicio json que se devuelve cuando llama a su URL como se indica en la documentación de fuentes de datos disponibles de Oracle .
Por ahora, creo que no tiene forma de hacer que Oraclize devuelva algo más que una cadena. Eso significa que debe obtener el Json devuelto como un parámetro de cadena de su __callback
función oraclize.
Pero luego, como pregunta, necesita analizar el json en una matriz. Esto sería muy costoso incluso si encuentra una manera de hacerlo.
Entonces, la respuesta corta sería que lo que pides no es posible.
Sin embargo, permítanme sugerir las siguientes soluciones alternativas, no totalmente satisfactorias. Sé que son solo soluciones alternativas que probablemente no se ajusten a sus necesidades, pero creo que lo que quiere hacer no es posible por ahora, así que tratemos de acercarnos lo más posible a la meta.
Soluciones alternativas:
El análisis de cadenas probablemente será prohibitivamente costoso dentro del EVM. ¿Por qué desea realizar un análisis dentro del EVM cuando podría hacerlo trivialmente desde el exterior y pasar los datos ya en el formato correcto?
En su ejemplo específico, si solo desea cargar una cadena-> mapeo de cadenas, puede pasar dos matrices de cadenas como parámetros, una de las cuales son las claves y la segunda los valores. Un ciclo for simple podría cargarlo en un mapeo de Solidity sin ninguna sobrecarga de análisis.
Sé que esta pregunta es bastante antigua, sin embargo, agregaré mi opinión de todos modos.
Si su JSON es lo suficientemente pequeño, podría valer la pena analizarlo en cadena para evitar la molestia y el costo de dos o más llamadas orquestadas a un oráculo. Acabo de publicar la primera versión de un analizador JSON para Solidity en github: https://github.com/chrisdotn/jsmnSol
Si quieres usarlo debes:
Una introducción más completa está en medio: https://medium.com/@chrisdotn/a-json-parser-for-solidity-9cc73b4b42
Entonces, en esencia, lo que hace esta respuesta es proporcionar una forma de usar la opción (2) de la respuesta de Nicolás.
arodriguezdonaire