Janio Aguiar

Ler Json

5 posts in this topic

Boa tarde,

Alguem tem ideia de como ler o Json abaixo?

Lembrando que "NAOENCERRADOS002... 003... 004..." etc eu nao sei se tera ou nao. Pode ter centenas, ou nenhum. 

Obg

PS:
Versao 23
Json : { "NAOENCERRADOS" : { "CStat" : 111, "CUF" : 23, "NAOENCERRADOS002" : { "CNPJCPF" : "07439697000140", "ChMDFe" : "23210507439697000140580010000000131000000180", "Msg" : "", "NProt" : "923210000001056" }, "NAOENCERRADOS003" : { "CNPJCPF" : "07439697000155", "ChMDFe" : "23210507439697000140580010000000131000001254", "Msg" : "", "NProt" : "923210000001056" }, "Msg" : "", "TpAmb" : "2", "VerAplic" : "RS20210422122621", "Versao" : "RS20210422122621", "XMotivo" : "Consulta não encerrados localizou MDF-e nessa situação" } }

js.png

Share this post


Link to post
Share on other sites

Não sei se será possível, parece q não tem um padrão nisso, teria q ver se esta correto este JSON no sentido de padronização, pq se vc teria q montar uma STRUCTURE para deserializar o JSON na STRUCTURE e usar o ARRAYSEEK.

Share this post


Link to post
Share on other sites

Provisoriamente estou fazendo como abaixo, mas acho que deve haver uma maneira mais fácil, para os padrões windeveiros;

 

sMembroVar is string = "NAOENCERRADOS" + MyStrZero(nContaElem,3)



FOR EACH MemberVariant OF jRetorno.NAOENCERRADOS

	IF MemberVariant..Name = sMembroVar THEN					

		

		sChvMdf is string = MemberVariant.ChMDFe

		

		nContaElem++

		sMembroVar = "NAOENCERRADOS" + MyStrZero(nContaElem,3)

	

	END

END

 

1 person likes this

Share this post


Link to post
Share on other sites

Fiz um exercício / improviso com meu resumo do que aprendi por aqui, mas não sei se chamaria isso de padrão não, acho que o seu código tá mais pra padrão que o meu:
 

vVar is Variant = JSONToVariant(EDT_JSON)



nCont is int = 0

bBreak is boolean = False

nSeuLimiteAVerificar is int = 9999  //abusei (100k, 1kk), demorou, cuidado

sAux is string



FOR EACH member OF vVar..Member

	Trace(member..Name)  //NAOENCERRADOS

	Trace(member.CStat)

	Trace(member.CUF)

	

	bBreak = False

	WHILE bBreak = False

		gsNomeCampo = "member.NAOENCERRADOS" + NumToString(nCont, "03d")

		//https://doc.windev.com/en-US/?1512005&name=indirection_operators informa que, em Android, 

		// " The indirections are supported by the global variables only."

		

		IF {gsNomeCampo, indVariable}..Exist THEN

			sAux = gsNomeCampo

			Trace(Replace(gsNomeCampo,"member","NAOENCERRADOS"))

			

			gsNomeCampo += ".CNPJCPF"

			Trace({gsNomeCampo, indVariable})

			gsNomeCampo = sAux

			

			gsNomeCampo += ".ChMDFe"

			Trace({gsNomeCampo, indVariable})

			gsNomeCampo = sAux

			

			gsNomeCampo += ".Msg"

			Trace({gsNomeCampo, indVariable})

			gsNomeCampo = sAux

			

			gsNomeCampo += ".NProt"

			Trace({gsNomeCampo, indVariable})

			gsNomeCampo = sAux			

			Trace("-----------")

		END

		

		nCont++

		IF nCont > nSeuLimiteAVerificar THEN BREAK

	END

	

	Trace(member.Msg)

	Trace(member.TpAmb)

	Trace(member.VerAplic)

	Trace(member.Versao)

	Trace(member.XMotivo)

END

 

1 person likes this

Share this post


Link to post
Share on other sites

Parabéns, muito bom exemplo de outra forma de se tratar esta questão, grato por compartilhar

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now