Buenas noches... les comparto este que pasa el Json a un cursor/dbf.
*-------------------------------------------------------------------------------------------------------------------------------*
* Json a DBF / Recibe un Json y Crea un CURSOR con sus Campos Json / Todos tipo String Tamaño 80. Retorna .T. si Crea JsonDbf.DBF ó <nameFile.DBF>
*-------------------------------------------------------------------------------------------------------------------------------*
PROCEDURE JsonToTabla(lcString as String) as Logical
USE IN SELECT("JsonDbf") && Cierro Tabla a Crear
ERASE JsonDbf.dbf
JTT = CHRTRAN(CHRTRAN(CHRTRAN(lcString,CHR(13),""), CHR(10),""), CHR(9),"") && Quito Enter + SaltosLínea + Tab
JTT = STRTRAN(JTT,[" : "],[":"]) && Quito Espacios para contar Objetos dentro de {}
JTT = IIF(LEFT(JTT,1)='[', JTT, "["+JTT+"]")
IF LEFT(JTT,1)="[" AND RIGHT(JTT,1)="]" && [ ]
nObj = OCCURS("}", JTT) && Nº Objetos adentro = "Registros" = Filas del Array
cCampos = ""
oReg = CHRTRAN(STREXTRACT(JTT,"{","}",1), ["], [])
nCam = OCCURS([:],oReg) && Nº Campos a crear = Columnas Array
DIMENSION ArrayCam[IIF(nObj>0,nObj,1), IIF(nCam>0,nCam,1)] && Array para Valores [Fil,Col]
FOR i = 1 TO nObj
oReg = CHRTRAN(STREXTRACT(JTT,"{","}",i), ["], [])
* Solo en Objeto 1 creo el Vector de "Campos".
IF i=1
FOR j=1 TO nCam && Veo los campos:valores
cam = GETWORDNUM(oReg, j, [,])
cCampos = cCampos + IIF(EMPTY(cCampos),"",[, ]) + GETWORDNUM(cam,1,":") + " C(80)"
ENDFOR
cCampos = CHRTRAN(cCampos,CHR(13),"")
ENDIF
* Lleno Array con los Valores
FOR j=1 TO nCam
ArrayCam(i,j) = STREXTRACT(oReg,[:], IIF(j=nCam,"",[,]), j)
ENDFOR
ENDFOR
* CREO LA TABLA solo si la Cadena cCampos viene con Valor. Y agrego valores del Array
cCampos = STRTRAN(cCampos, "saldoPrevio", "saldoPrev") && CORTO de 11 caracteres a 9. Solo es válido hasta 10.
IF !EMPTY(cCampos)
JsonT = IIF(VARTYPE(nameFile)='C', nameFile, "JsonDbf")
CREATE TABLE &JsonT (&cCampos)
APPEND FROM ARRAY ArrayCam
USE && Cierro la Tabla
ENDIF
nResul = IIF(EMPTY(cCampos),.F.,.T.) && Si creo cursor reporta .T. sino .F.
ENDIF
RETURN IIF(VARTYPE(nResul)='L', nResul, .F.)
ENDPROC