Lua добавить пару ключ-значение в таблицу (массив) - PullRequest
1 голос
/ 21 апреля 2019

В моем проекте Lua я получаю массив, кодирую его в JSON и перехожу дальше. Моя функция кодирования Lua выглядит следующим образом:

local function encode_table(val, stack)

  local res = {}
  stack = stack or {}

  -- Circular reference?
  if stack[val] then error("circular reference") end

  stack[val] = true

  if val[1] ~= nil or next(val) == nil then
    -- Treat as array -- check keys are valid and it is not sparse
    local n = 0

    for k in pairs(val) do

      if type(k) ~= "number" then
        error("invalid table: mixed or invalid key types")
      end
      n = n + 1
    end
    -- need to add a stub somewhere here above the next line
    if n ~= #val then
      error("invalid table: sparse array") -- THIS TRIGGERS and stops the code
    end
    -- Encode
    for i, v in ipairs(val) do
      table.insert(res, encode(v, stack))
    end
    stack[val] = nil
    return "[" .. table.concat(res, ",") .. "]"

  else
    -- Treat as an object
    for k, v in pairs(val) do

      if type(k) ~= "string" then
        error("invalid table: mixed or invalid key types")
      end

      table.insert(res, encode(k, stack) .. ":" .. encode(v, stack))
    end
    stack[val] = nil
    return "{" .. table.concat(res, ",") .. "}"
  end
end

Проблема в том, что я обнаружил массив с отсутствующим 1 элементом. Мне нужно добавить заглушку для него в ключ-значение, скажем

myArray['missingKey'] = 'somestubvalue'

но я не знаю, как это сделать. Также в коде есть проверка на разреженный массив, и эта проверка выдает ошибку, поэтому мне нужно добавить заглушку, прежде чем эта проверка будет выполнена (см. Код). Любые идеи, как это сделать, будут приветствоваться. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...