Notícias:

SMF - Just Installed!

Menu principal

json.codvisual()

Iniciado por rafael, Dezembro 12, 2017, 11:51:04 PM

tópico anterior - próximo tópico

rafael

Boa noite,

Eu uso muito o json por conta do javascript e muitas vezes preciso ler os dados então pra ficar mais legível modifiquei a função json.cod()

Quem quiser aprimorar fique a vontade


funcao json.codvisual(obj, as_key)
  local s = {}  // We'll build the string as an array of strings to be concatenated.
  local kind = kind_of(obj)  // This is 'array' if it's an array or type(obj) otherwise.
  n = 0
  t = 0
  se kind == 'array' entao
    se as_key entao retorne falso, ('Não é possível codificar uma matriz como uma chave.') fim
   // n = n + 1

    s[#s + 1] = '[\n'
    para i, val em ipares(obj) inicio
t = t + 1
      se i > 1 entao s[#s + 1] = ', \n'  fim
      s[#s + 1] = json.codvisual(val)
    fim
    s[#s + 1] = '\n]'
  senaose kind == 'tabela' entao
    se as_key entao retorne falso, ('Não é possível codificar tabela como uma chave.') fim
    s[#s + 1] = '{\n'
    para k, v em pares(obj) inicio
      se #s > 1 entao s[#s + 1] = ', \n' fim
      s[#s + 1] = json.codvisual(k, verdadeiro)
      s[#s + 1] = ' :'
      s[#s + 1] = json.codvisual(v)
    fim
   
    s[#s + 1] = '\n}'
  senaose kind == 'string' entao
    retorne ' "' .. escape_str(obj) .. '"'
  senaose kind == 'numero' entao
    se as_key entao retorne '"' .. convstring(obj) .. '"' fim
    retorne convstring(obj)
  senaose kind == 'boolean' entao
    retorne convstring(obj)
  senaose kind == 'nulo' entao
    retorne 'null'
  senao
    retorne falso, ('Tipo não compatível com json: ' .. kind .. '.')
  fim
  retorne tabela.concat(s)
fim



saída:

[
   {
     "ifname" : "ppp1",
     "username" : "fulano",
     "state" : "active",
     "rate-limit" : "10000\/1000",
     "called-sid" : "rede1",
     "uptime" : "00:01:06",
     "tx-bytes-raw" : "1012526",
     "rx-bytes-raw" : "170130",
     "ip" : "10.10.10.1",
     "calling-sid" : "BB:RR:AA:SS:II:LL"
   },
   {
     "ifname" : "ppp2",
     "username" : "ciclano",
     "state" : "active",
     "rate-limit" : "10000\/1000",
     "called-sid" : "rede1.2",
     "uptime" : "00:00:55",
     "tx-bytes-raw" : "2526",
     "rx-bytes-raw" : "1130",
     "ip" : "10.10.10.1",
     "calling-sid" : "BR:AS:IL:BR:AS:IL"
   }
]

adalberto

Muito bom, bem mais organizada a saída gerada.