Giter Site home page Giter Site logo

Comments (5)

Trumeet avatar Trumeet commented on July 30, 2024 9

English please.

from json.lua.

utmhikari avatar utmhikari commented on July 30, 2024

目测是源码encode_table的next测到nil直接判定为array了
可以小魔改一下,比如:

 local t_type = 'array'
 local n = 0
 local max = -1
 for k in pairs(val) do
    if type(k) == "string" then
      t_type = 'object'
      break
    elseif type(k) == "number" then
      n = n + 1
      max = math.max(max, k)
    else
      error("invalid table: mixed or invalid key types")
    end
  end
if t_type == 'array' then
    if n == 0 then
      t_type = 'object'
    elseif n ~= #val then
      t_type = 'sparse_array'
    end
  end

来区分array、稀疏array跟object

from json.lua.

fnaith avatar fnaith commented on July 30, 2024

(Just translating)

local json_before = {"key":[{},{},{},{},{},{},{},{},{},{}],"roleAttr":{"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"0":0,"1":0,"2":0}}
local list = json.decode(json_before );
local json_after = json.encode(list);
此时的json_afre为:{"key":[[],[],[],[],[],[],[],[],[],[]],"roleAttr":{"1":0,"0":0,"3":0,"2":0,"5":0,"4":0,"7":0,"6":0,"9":0,"8":0}}

为何不一样?

local json_before = {"key":[{},{},{},{},{},{},{},{},{},{}],"roleAttr":{"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"0":0,"1":0,"2":0}}
local list = json.decode(json_before );
local json_after = json.encode(list);
In this moment json_after is : {"key":[[],[],[],[],[],[],[],[],[],[]],"roleAttr":{"1":0,"0":0,"3":0,"2":0,"5":0,"4":0,"7":0,"6":0,"9":0,"8":0}}

Why are json_before and json_after different?

目测是源码encode_table的next测到nil直接判定为array了
可以小魔改一下,比如:

 local t_type = 'array'
 local n = 0
 local max = -1
 for k in pairs(val) do
    if type(k) == "string" then
      t_type = 'object'
      break
    elseif type(k) == "number" then
      n = n + 1
      max = math.max(max, k)
    else
      error("invalid table: mixed or invalid key types")
    end
  end
if t_type == 'array' then
    if n == 0 then
      t_type = 'object'
    elseif n ~= #val then
      t_type = 'sparse_array'
    end
  end

来区分array、稀疏array跟object

It seems like the encode_table treat input table as array when it found nil by next.
Could modify code like...

 local t_type = 'array'
 local n = 0
 local max = -1
 for k in pairs(val) do
    if type(k) == "string" then
      t_type = 'object'
      break
    elseif type(k) == "number" then
      n = n + 1
      max = math.max(max, k)
    else
      error("invalid table: mixed or invalid key types")
    end
  end
if t_type == 'array' then
    if n == 0 then
      t_type = 'object'
    elseif n ~= #val then
      t_type = 'sparse_array'
    end
  end

...to distinguish between array, sparse array and table.

from json.lua.

ruyi789 avatar ruyi789 commented on July 30, 2024
local __json_object = {__json_object =  function() end}
function json.newObject()
  return setmetatable({}, __json_object)
end

parse_object

local function parse_object(str, i)
  local res = json.newObject()

encode_table

  local t = getmetatable(val)
  if (t == nil or t.__json_object == nil) and (rawget(val, 1) ~= nil or next(val) == nil) then

from json.lua.

alexandro-rezakhani avatar alexandro-rezakhani commented on July 30, 2024

Hello! Would you mind creating a pull request on my fork so that I may include your suggestions?

Thanks!

from json.lua.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.