alex2002 Posted February 2, 2021 Report Share Posted February 2, 2021 OIá pessoal, alguém sabe me informar qual parametro uso para que na codificação do Json (hb_jsonencode()) não ordene as tags e sim deixe na ordem da criação das mesmas? Ex: ///////////////////////////////////////////////////////////////////////// hJson := hash() hJson['campo3'] := 'teste 3' hJson['campo1'] := 'teste 1' hJson['campo2'] := 'teste 2' cJson := hb_jsonencode( hJson, .t. ) ? cJson resultado: { "campo1" : "teste 1", "campo2" : "teste 2", "campo3" : "teste 3" } Sendo que eu queria que ocorresse assim: { "campo3" : "teste 3", "campo1" : "teste 1", "campo2" : "teste 2" } Ou seja, na sequência que eu inseri tem mais algum parametro na função hb_jsonencode() ? Não achei a documentação da mesma nem a pau Quote Link to comment Share on other sites More sharing options...
alex2002 Posted February 2, 2021 Author Report Share Posted February 2, 2021 Na verdade eu percebi que o problema não é na hb_jsonencode e sim no hash() que ordena as tags, agora sinceramente não sei o que fazer Quote Link to comment Share on other sites More sharing options...
emotta Posted February 3, 2021 Report Share Posted February 3, 2021 Alex o jeito é escrever uma HB_JSONENCODE na mão, mas não aconselho isso. Agora apenas por curiosidade, pq vc precisa que seja ordenado? Que eu não sabe o padrão JSon não exige que esteja ordenado. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted February 3, 2021 Report Share Posted February 3, 2021 Bom dia baixinho, veja se ajuda: http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=17940 Abs. Quote Link to comment Share on other sites More sharing options...
emotta Posted February 3, 2021 Report Share Posted February 3, 2021 Fiz essa função a alguns anos, antes de conhecer a padrão do xHarbour. Ela tem algumas limitações e não aconselho usar, a padrão da linguagem é a melhor, mas realmente se precisar que seja ordenado veja o que essa te ajuda. No exemplo abaixo o resultado é exatamente o q vc pediu #define CRLF Chr(13)+Chr(10) Function u_Teste() Local hJson := Hash() Local cJSon HSetAACompatibility(hJson,.t.) hJson['campo3'] := 'teste 3' hJson['campo1'] := 'teste 1' hJson['campo2'] := 'teste 2' cJSon := _u_HashToJson_OLD(hJson) MsgStop(cJSon) Return Static Function _u_HashToJson_OLD(hPar) Local cParam := "{"+CRLF Local nI Local nJ Local uVal2 Local uVal Local aKey Local cKey Local nRealPos aKey := hGetKeys(hPar) For nI:=1 to Len(aKey) If HGetAACompatibility(hPar) nRealPos := HaaGetRealPos( hPar, nI ) cKey := HGetKeyAt( hPar, nRealPos ) Else cKey := aKey[nI] EndIf uVal := hPar[cKey] If ValType(uVal)=="C" uVal := '"'+Alltrim(uVal)+'"' ElseIf ValType(uVal)=="N" uVal := Alltrim(Str(uVal)) ElseIf ValType(uVal)=="D" uVal := '"'+DtoC(uVal)+'"' ElseIf ValType(uVal)=="A" uVal2 := "["+CRLF For nJ := 1 to Len(uVal) uVal2 += _u_HashToJson_OLD(uVal[nJ]) If ! nJ == Len(uVal) uVal2 += "," EndIf Next uVal2+="]"+CRLF uVal := uVal2 ElseIf ValType(uVal)=="H" uVal := _u_HashToJson_OLD(uVal) ElseIf Empty(uVal) uVal := '""' EndIf cParam += '"'+cKey+'":'+uVal If ! nI == Len(aKey) cParam += "," EndIf cParam += CRLF Next cParam += '}'+CRLF Return cParam Quote Link to comment Share on other sites More sharing options...
alex2002 Posted February 3, 2021 Author Report Share Posted February 3, 2021 Obrigado a todos, na verdade o problema não era o Json e sim o HASH() que de fato é ordenado. A função hb_jsonencode() não muda a ordenação. De fato para o server que vai receber o arquivo json tanto faz a ordem, mas como eu estava atrasado (ainda estou rsrsrsrs) fiz a geração na unha mesmo. Obrigado aos amigos. Jão, tudo tranquilo por aqui, e como estão as coisas por aí? Quote Link to comment Share on other sites More sharing options...
kapiaba Posted February 3, 2021 Report Share Posted February 3, 2021 3 minutos atrás, alex2002 disse: Obrigado a todos, na verdade o problema não era o Json e sim o HASH() que de fato é ordenado. A função hb_jsonencode() não muda a ordenação. De fato para o server que vai receber o arquivo json tanto faz a ordem, mas como eu estava atrasado (ainda estou rsrsrsrs) fiz a geração na unha mesmo. Obrigado aos amigos. Jão, tudo tranquilo por aqui, e como estão as coisas por aí? Estamos bem Alex, mas todo kgado de medo do vírus me pegar por trás e me phoder todo.... kkkkkkkkkkkkkk Ken tem kú tem medo, né meu caro amigo Mineiro? Vamos torcer para essa pandemia do kpeta passar, ai marcamos um ENCONTRO DE FIVEWINNERS, para BEBER e Matar as saudades e botar as novidades em dia. Abraços e use máscara. Quote Link to comment Share on other sites More sharing options...
alex2002 Posted February 5, 2021 Author Report Share Posted February 5, 2021 Pois é "Karinh", eu peguei esse vírus, passei muito mal, muito mesmo. Mas hoje, graças a Deus, estou bem. Vamos marcar sim. Um abraço, kapiaba 1 Quote Link to comment Share on other sites More sharing options...
betovsp Posted February 8, 2021 Report Share Posted February 8, 2021 Em 03/02/2021 at 14:47, kapiaba disse: Estamos bem Alex, mas todo kgado de medo do vírus me pegar por trás e me phoder todo.... kkkkkkkkkkkkkk Ken tem kú tem medo, né meu caro amigo Mineiro? Vamos torcer para essa pandemia do kpeta passar, ai marcamos um ENCONTRO DE FIVEWINNERS, para BEBER e Matar as saudades e botar as novidades em dia. Abraços e use máscara. Também quero ir nesse encontro com os amigos dessa vez, o primeiro e último foi no segundo encontro realizado em guarulhos, há 15 ou 16 anos atrás poxa vida. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted February 9, 2021 Report Share Posted February 9, 2021 11 horas atrás, betovsp disse: Também quero ir nesse encontro com os amigos dessa vez, o primeiro e último foi no segundo encontro realizado em guarulhos, há 15 ou 16 anos atrás poxa vida. Isso é óbvio né Beto? Vamos esperar passar, e ver se a "biba" do Vagner Wirts consegue um alvará para vir. Dessa vez, vou cobrar uma "taxa" simbólica para as brejas, pois se a pessoa marcar e não vier, fica no prejú e quem veio, não paga a conta. Que achas? Quote Link to comment Share on other sites More sharing options...
alex2002 Posted February 9, 2021 Author Report Share Posted February 9, 2021 4 horas atrás, kapiaba disse: Isso é óbvio né Beto? Vamos esperar passar, e ver se a "biba" do Vagner Wirts consegue um alvará para vir. Dessa vez, vou cobrar uma "taxa" simbólica para as brejas, pois se a pessoa marcar e não vier, fica no prejú e quem veio, não paga a conta. Que achas? Concordo plenamente. Quote Link to comment Share on other sites More sharing options...
betovsp Posted February 9, 2021 Report Share Posted February 9, 2021 11 horas atrás, kapiaba disse: Isso é óbvio né Beto? Vamos esperar passar, e ver se a "biba" do Vagner Wirts consegue um alvará para vir. Dessa vez, vou cobrar uma "taxa" simbólica para as brejas, pois se a pessoa marcar e não vier, fica no prejú e quem veio, não paga a conta. Que achas? Fechado. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted February 10, 2021 Report Share Posted February 10, 2021 4 horas atrás, betovsp disse: Fechado. Tamu junto. E ninguém pode dizer que eu enganei ou roubei, pois eu jogo limpo. Tá documentado aqui, Se vier bebe, se não vier, nós bebemos com o dinheiro dele. Mesmo porquê, não sou como o Crhistiano Silveira, que enganou todo mundo. Não tem coisa mais gostosa que ser limpo. Fui em vários encontros, e nunca paguei pohha nenhuma, os amigos ou o patrão pagava. Nem o meu primeiro FIVEWIN oficial, eu paguei, o GILMER me deu. Não tenho rabo preso com ninguém. Orgulho em conhecer os melhores, orgulho de permanecer até hoje com os melhores. Os melhores, estão comigo até hoje. Quem não prestava... Sefú... Abraços. Quote Link to comment Share on other sites More sharing options...
CTOAS Posted February 10, 2021 Report Share Posted February 10, 2021 Obrigado João Santos pela parte que me toca. Tive um problema sim, nunca fugi e sempre estive aqui, nunca mudei o apelido (em nenhum dos fóruns) e só não devolvi o dinheiro (ainda) porque não deu. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted February 10, 2021 Report Share Posted February 10, 2021 Crhistiano, ótima oportunidade para começar a se redimir. Aproveite esse tempo de pandemia, e vá juntando verba. Em vez de gastar com brejas e vinhos caros, economize. Quando tudo isso passar, acho que você já terá uma boa verba. Quanto está sua dívida hoje, R$ 7.000,00 ?? Junte o que puder e na época do ENCONTRO DE FIVEWINNERS, você faz o depósito do que tiver juntando e todos beberão e comerão de graça. Seja Homem e comece a honrar as fraudas, sim? Abs. Quote Link to comment Share on other sites More sharing options...
qiinfo Posted March 8, 2021 Report Share Posted March 8, 2021 Olá Alex, Não sei se já resolveu o problema, mas existe uma configuração nas variáveis HASH para desativar a ordenação e mais algumas outras configurações. Veja se o exemplo abaixo te ajuda: function main cls hJson := hb_hash() ? hb_HCaseMatch( hJson, .T. ) // No Case Sensitive ? hb_HKeepOrder( hJson, .T. ) // No Alphabetical Order ? hb_HAutoAdd( hJson, .T. ) // Se permite inserir um novo elemento automaticamente. hJson['campo3'] := 'teste 3' hJson['campo1'] := 'teste 1' hJson['campo2'] := 'teste 2' cJson := hb_jsonencode( hJson, .t. ) ? cJson return NIL Testado com Harbour 3.4 Rossine. aferra 1 Quote Link to comment Share on other sites More sharing options...
alex2002 Posted March 11, 2021 Author Report Share Posted March 11, 2021 Valeu Rossine, Já resolvi, mas é bom saber que existe essa possibilidade. Um abraço, Alexandre Pereira Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.