Clipper On Line • Ver Tópico - Harbour JavaScript Object Notation(JSON)

Harbour JavaScript Object Notation(JSON)

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

Harbour JSON, JavaScript Object Notation

Mensagempor Itamar M. Lins Jr. » 09 Set 2010 13:46

Ola forum.

2010-09-08 18:15 UTC+0300 Mindaugas Kavaliauskas (dbtopas/at/dbtopas.lt)
+ harbour/src/rtl/hbjson.c
+ added JavaScript Object Notation (JSON) encoder, decoder functions

; C level functions:
char * hb_jsonEncode( PHB_ITEM pValue, HB_SIZE * pnLen );
pValue - value to encode;
pnLen - if pnLen is not NULL, length of returned buffer is
stored to *pnLen;
returns pointer to encoded JSON buffer. buffer must be fried
by the caller.

HB_SIZE hb_jsonDecode( const char * szSource, PHB_ITEM pValue );
szSource - JSON source;
pValue - item to store decoded value. Item value is
undetermined in case of error;
returns number of bytes decoded from the buffer. This allows
to use the remaining part of the buffer for some other
purposes. Returns 0 on error.

Harbour level functions:
hb_jsonDecode( cJSON, @xValue ) --> nLengthDecoded
hb_jsonEncode( xValue ) --> cJSON

Note:
- Harbour types unsupported by JSON (date, timestamp, etc.) are
encoded as null values;
- strings are encoded in UTF-8;
- JSON encode functions are safe for recursive arrays and hashes.
Recursive part of array or hash will be stored as null. JSON
encoder still allows to use same structure in the leaves, in
this case content will be duplicate.
I.e.:
xI := {1, NIL}
xI[2] := xI
? hb_jsonEncode( xI ) // [1,null]
but:
xI := {1, .T.}
xI := {2, xI, xI}
? hb_jsonEncode( xI ) // [2,[1,true],[1,true]]


Examplo de uso:
I just created this sample to test the new functions....

-----------------------> test.json (from json wikipedia page)
{
    "firstName": "John",
    "lastName": "Smith",
    "age": 25,
    "address": {
        "streetAddress": "21 2nd Street",
        "city": "New York",
        "state": "NY",
        "postalCode": "10021"
    },
    "phoneNumber": [
        {
          "type": "home",
          "number": "212 555-1234"
        },
        {
          "type": "fax",
          "number": "646 555-4567"
        }
    ]
}

------------------------> js.prg
procedure main
Local nLen
Local res
Local o

text = memoread( "test.json" )

nLen := hb_jsondecode( text, @res )

? nLen, " bytes decoded"

? "name:", res["firstName"]
? "postalcode:", res["address"]["postalCode"]
? "fax: "

o := 0
FOR EACH o IN res["phoneNumber"]
   if o["type"] == "fax"
       ?? o["number"]
   endif
NEXT

--------------> console output

      444  bytes decoded
name: John
postalcode: 10021
fax: 646 555-4567


Se precisar ja sei que tem algo no harbour :-)

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Re: Harbour JavaScript Object Notation(JSON)

Mensagempor sygecom » 16 Dez 2010 15:44

Olá Itamar,
Para que serve o JSON ? ( nem conheço ele ainda, mas manda um abraço pra ele )
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7006
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 130 vezes

Re: Harbour JSON, JavaScript Object Notation

Mensagempor danielgianni » 24 Dez 2010 18:24

Por favor, peciso de orientações de como instalar essa biblioteca. Sou novato no harbour e apesar deste tópico ser antigo é de total interesse meu.

Eu estou usando em linux (ubuntu 8.04) com harbour 2.0 e instalado a partir dos binários (compilação não obteve sucesso por problemas na sqlite3)??
danielgianni
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 9
Data de registro: 28 Abr 2010 14:20
Cidade/Estado: Ribeirão Preto - SP
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Re: Harbour JavaScript Object Notation(JSON)

Mensagempor danielgianni » 24 Dez 2010 18:27

sygecon

O JSON é uma notação parecida com XML mas basea-se nos objetos e vetores do javascript.

Olha só http://pt.wikipedia.org/wiki/JSON

eu uso isso no lugar de banco de dados (para casos menores -- sistema interno com pouco uso simultâneo)
danielgianni
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 9
Data de registro: 28 Abr 2010 14:20
Cidade/Estado: Ribeirão Preto - SP
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Re: Harbour JavaScript Object Notation(JSON)

Mensagempor danielgianni » 24 Dez 2010 18:30

Mas eu gostaria de saber do itamar como posso instalar essa biblioteca no harbour 2.0

Estou usando a versão binária no linux ubuntu 8.04 (servidor não posso atualizar para versòes mais recentes)

Mas quando vou compilar teu exemplo dá erro feio:

#hbmk js.prg
Harbour 2.0.0 (Rev. 13372)
Copyright (c) 1999-2010, http://www.harbour-project.org/
Compiling 'js.prg'...
Lines 22, Functions/Procedures 1
Generating C source output to 'js.c'... Done.
./js.o:(.data+0x58): undefined reference to `HB_FUN_HB_JSONDECODE'
collect2: ld returned 1 exit status

danielgianni
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 9
Data de registro: 28 Abr 2010 14:20
Cidade/Estado: Ribeirão Preto - SP
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Re: Harbour JavaScript Object Notation(JSON)

Mensagempor Itamar M. Lins Jr. » 26 Dez 2010 09:28

Ola!
Estou usando a versão binária no linux ubuntu 8.04 (servidor não posso atualizar para versòes mais recentes)


Neste caso não sei como pode fazer, porque acredito que está na versão 2.1 e no diretório RTL, não havendo lib portanto.
C:\harbour\trunk\harbour>harbour -build
Harbour 2.1.0beta2 (Rev. 15878)
Copyright (c) 1999-2010, http://harbour-project.org/

Harbour Build Info
---------------------------
Version: Harbour 2.1.0beta2 (Rev. 15878)
Compiler: MinGW GNU C 3.4.5 (32-bit)
Platform: Windows XP 5.1.2600 Service Pack 3
PCode version: 0.3
ChangeLog last entry: 2010-11-24 11:56 UTC+0100 Viktor Szakats (harbour.01 syena
r.hu)
ChangeLog ID: ChangeLog 15878 2010-11-24 10:56:46Z vszakats
Built on: Nov 24 2010 08:06:48
Build options: (Clipper 5.3b) (Clipper 5.x undoc) (UNICODE)
---------------------------

E olhe que já está defasado essa versão que estou usando em relação ao SVN que é:
 * $Id: ChangeLog 15972 2010-12-23 21:40:45Z druzus $


Inclusive já trabalhando com campos Date e TimeStamp.
2010-10-24 02:21 UTC+0300 Mindaugas Kavaliauskas (dbtopas/at/dbtopas.lt)
* harbour/rtl/hbjson.c
+ added support for date and timestamp type encoding


Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Re: Harbour JavaScript Object Notation(JSON)

Mensagempor vailton » 27 Dez 2010 09:08

Olá Daniel,
danielgianni escreveu:Mas eu gostaria de saber do itamar como posso instalar essa biblioteca no harbour 2.0

Estou usando a versão binária no linux ubuntu 8.04 (servidor não posso atualizar para versòes mais recentes)

Uma outra opção que me veio à cabeça seria você baixar em outro local a estrutura SVN, copiar apenas os arquivos fontes que possuem esta funcionalidade e gerar uma LIB do mesmo. Desta forma você usaria esta LIB na sua versão em produção. Consulte o changelog para averiguar quais arquivos são necessários.
Vailton Renato
"No dia mais claro, na noite mais escura... o bug sucumbirá ante a minha presença"

E-mail/MSN: contato@vailton.com.br
Skype: vailtom
Avatar de usuário

vailton
Colaborador

Colaborador
 
Mensagens: 378
Data de registro: 17 Nov 2005 18:08
Cidade/Estado: Brasil
Curtiu: 2 vezes
Mens.Curtidas: 11 vezes

Re: Harbour JavaScript Object Notation(JSON)

Mensagempor Stanis Luksys » 04 Jan 2011 02:12

Opa,

Eu coloquei para download um tempo atrás um pequeno exemplo de uso de JSON... É um recurso formidável que para quem pretende integrar plataforma web e desktop utilizando bancos relacionais. Além do mais, é muito útil na criação e consumo de web services.

É importante lembrar que uma vez que o javascript roda no cliente, utilizando JSON, você diminue bastante a carga de processamento do servidor, trazendo dele apenas um texto de dados bruto, para então avaliar localmente. Muito diferente do que até há pouco ainda fazíamos que era executar aqueles scripts PHP imensos no servidor.

O exemplo com aplicação em Harbour é esse:
http://sites.google.com/site/hblibs/exemplos-com-fontes/visualizador-do-youtube-com-hbqt

Abraços!
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar de usuário

Stanis Luksys
Colaborador

Colaborador
 
Mensagens: 1329
Data de registro: 18 Jun 2005 03:04
Cidade/Estado: São Paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Re: Harbour JavaScript Object Notation(JSON)

Mensagempor asimoes » 04 Jan 2011 06:45

Olá Stanis,

O que é necessário para rodar o exemplo do link?
Eu baixei, mas tem várias dlls dependentes sendo reclamadas.

[]´s
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Re: Harbour JavaScript Object Notation(JSON)

Mensagempor Stanis Luksys » 04 Jan 2011 17:53

Opa...

Então... Basicamente você precisa das DLLs do Qt e do MINGW, acontece que mesmo tendo estas DLLs podem ocorrer erros de acordo com as versões, e por este motivo recomendo que baixe os fontes e compile o programa.

O que acontece é o seguinte: O conjunto de bibliotecas Qt tem vários tipos de licença, sendo que a gratuita (LGPL) exige que você linke seu programa dinamicamente, ou seja, se você quer usufruir de graça, necessariamente é obrigado a enviar as DLLs pro usuário final, já se você adquirir uma licença comercial, então pode linkar tudo estaticamente e não precisa enviar as DLLs.

Na verdade, pelo que lí das licenças, até existe uma brecha sim, você pode linkar estaticamente usando a versão LGPL, desde que seu programa também seja coberto por esta licença. Enfim, para usar de graça e não enviar as DLLs, precisa liberar o código do seu programa, não no todo, mas todos os arquivos fontes que fazem referência a qualquer função das bibliotecas deles. Eu não teria problemas com isso, uma vez que o meu código já está disponível, no entanto estou tendo dificuldades para compilar estaticamente, pelo que pergunto se alguém já conseguiu fazer isso!

Bom, acho que saí um pouco do assunto, e não sei se fui claro, mas acho que é interessante entender isso tudo.

Aguarde alguns instantes que vou jogar lá uma outra versão que acredito vai requerer menos DLLs, compilada agora com o MSVC e não mais com o mingw.

Abraços.
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar de usuário

Stanis Luksys
Colaborador

Colaborador
 
Mensagens: 1329
Data de registro: 18 Jun 2005 03:04
Cidade/Estado: São Paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Harbour JavaScript Object Notation(JSON)

Mensagempor vagucs » 15 Out 2014 15:14

Amigos,

Estou trabalhando em uns webservice que usam JSON para transporte de dados, e perdi horas por causa do formato maluco de datas que o JSON usa, baseado em milissegundos.

Ai para contribuir, resolvi com esta pequena rotina, poderia fazer em C também, mas esta em puro harbour vale a pena pra aprendizado. Se alguém quiser melhorar vai ser bom.
O Harbour não dá suporte a tal formato, quando se gera um JSON com a HB_JSONENCODE, ela deixa as datas vazias. Isso pode ser muito útil. Ainda uso o Harbour 3.1 e não sei se na versão atual Beta colocaram este suporte.

function date_json(xDate,xHora,xUtc)
xDate=(xDate-ctod("01/01/1970"))*86400000
xDate+=(((val(left(xHora,2))*60)*60)*1000)+((val(substr(xHora,4,2))*60)*1000)+(val(right(xHora,2))*1000)
xDate=alltrim(str(xDate))
if xUtc=Nil
   xUtc="-0300" // Timezone do Brasil
end if
xDate+=xUtc
xDate='\/Date('+xDate+')\/'
return xDate

function json_date(xDate)
xDate=lower(xDate)
xDate=strtran(xDate,'\/date(')
xDate=strtran(xDate,'/date(')
xDate=strtran(xDate,')/\')
xDate=strtran(xDate,')/')
if "-"$xDate // Retira o timezone
   xDate=left(xDate,at("-",xDate)-1)
end if
xDate=val(xDate)
return ctod("01/01/1970")+(xDate/86400000)
Sem mais
Wagner Nunes
www.vagucs.com.br
Avatar de usuário

vagucs
Membro Master

Membro Master
 
Mensagens: 1466
Data de registro: 10 Jul 2004 10:45
Cidade/Estado: Ipanema - MG
Curtiu: 1 vez
Mens.Curtidas: 19 vezes

Harbour JavaScript Object Notation(JSON)

Mensagempor Itamar M. Lins Jr. » 15 Out 2014 17:16

Coloquei no grupo de desenvolvedores.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Harbour JavaScript Object Notation(JSON)

Mensagempor asimoes » 08 Ago 2016 12:27

Pessoal,

Para fazer o encode para gerar um arquivo .json formatado é só usar hb_jsonencode?
A minha duvida é como salvar, existe função para isso ou é posso usar ValToPrg, tipo:

hb_memowrit("new.json", ValToPrg(hRecords))
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Harbour JavaScript Object Notation(JSON)

Mensagempor vailton » 14 Ago 2016 11:16

Use deste modo:

hb_memowrit("new.json", hb_jsonEncode(hRecords))
Vailton Renato
"No dia mais claro, na noite mais escura... o bug sucumbirá ante a minha presença"

E-mail/MSN: contato@vailton.com.br
Skype: vailtom
Avatar de usuário

vailton
Colaborador

Colaborador
 
Mensagens: 378
Data de registro: 17 Nov 2005 18:08
Cidade/Estado: Brasil
Curtiu: 2 vezes
Mens.Curtidas: 11 vezes

Harbour JavaScript Object Notation(JSON)

Mensagempor Linguagemclipper » 13 Abr 2022 21:59

Como é que eu baixo essa lib do hbjson para o xharbour 1.2.1?
Usando xHarbour v1.2.3 Rev. 10264 + BCC 5.8, Elchs' LetoDBf, DBFCDX e SIBRA para imprimir relatórios.
Avatar de usuário

Linguagemclipper
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 214
Data de registro: 16 Abr 2016 17:33
Cidade/Estado: Maceió/AL
Curtiu: 38 vezes
Mens.Curtidas: 12 vezes

Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 11 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro