VE Lua Documentation

Press F to search!

jsonEncodePretty

Definition


-- @/lua/common/utils.lua:363

function jsonEncodePretty(v, lvl, numberPrecision)
  if v == nil then return "null" end
  local vtype = type(v)
  if vtype == 'string' then return stringformat('"%s"', escapeString(v)) end
  if vtype == 'number' then
    if v * 0 ~= 0 then -- inf,nan
      return v > 0 and '9e999' or '-9e999'
    else
      if numberPrecision == nil then
        return tostring(v)
      else
        if v ~= floor(v) then
          return stringformat('%' .. numberPrecision .. '.' .. numberPrecision .. 'f', v)
        else
          return stringformat('%d', v)
        end
      end
    end
  end
  if vtype == 'boolean' then return tostring(v) end

  -- Handle tables
  if vtype == 'table' then
    lvl = lvl or 1
    local indent = string.rep('  ', lvl)
    local indentPrev = string.rep('  ', max(0, lvl - 1))
    local tmp = {}
    if next(v) == 1 and next(v, #v) == nil then
      for i = 1, #v do
        table.insert(tmp, jsonEncodePretty(v[i], lvl + 1, numberPrecision))
      end
      return stringformat('[\n' .. indent .. '%s\n' .. indentPrev .. ']', table.concat(tmp, ',\n' .. indent))
    else
      if next(v) == nil then
        return '{}'
      else
        -- sort keys first
        local tableKeys = tableKeysSorted(v)
        for _, kk in pairs(tableKeys) do
          local vv = v[kk]
          local cv = jsonEncodePretty(vv, lvl + 1, numberPrecision)
          if cv ~= nil then table.insert(tmp, stringformat('"%s":%s', escapeString(tostring(kk)), cv)) end
        end
        return stringformat('{\n'..indent .. '%s\n'.. indentPrev ..'}', table.concat(tmp, ',\n' .. indent))
      end
    end
  end

  if vtype == 'cdata' and ffi.offsetof(v, 'z') ~= nil then  -- vec3
    if ffi.offsetof(v, 'w') ~= nil then
      return stringformat('{"x":%.10g,"y":%.10g,"z":%.10g,"w":%.10g}', v.x, v.y, v.z, v.w)
    else
      return stringformat('{"x":%.10g,"y":%.10g,"z":%.10g}', v.x, v.y, v.z)
    end
  end

  return "null"
end

Callers

@/lua/ge/extensions/editor/engineAudioDebug.lua
        }
        local dataString = jsonEncodePretty(data)
        dataString = dataString:sub(3, dataString:len() - 2)
@/lua/ge/extensions/editor/missionEditor/genericTypeData.lua
        self._editing = true
        local serializedProgress = jsonEncodePretty(self.mission.missionTypeData or "{}")
        local arraySize = 8*(2+math.max(128, 4*serializedProgress:len()))
@/lua/common/utils.lua
      for i = 1, #v do
        table.insert(tmp, jsonEncodePretty(v[i], lvl + 1, numberPrecision))
      end
          local vv = v[kk]
          local cv = jsonEncodePretty(vv, lvl + 1, numberPrecision)
          if cv ~= nil then table.insert(tmp, stringformat('"%s":%s', escapeString(tostring(kk)), cv)) end
    if pretty then
      content = jsonEncodePretty(obj, 1, numberPrecision)
    else
@/lua/ge/extensions/util/docCreator.lua
  if not f then return end
  f:write(jsonEncodePretty(data))
  --f:write(jsonEncodeFull(data))
@/lua/common/libs/xlsxlib/tests/tests.lua
    local content = string.format('// Test args: %s\r\n', serialize(queryArgs))
    content = content .. jsonEncodePretty({data}, 1)
    writeFile(fn, content)
@/lua/ge/extensions/editor/missionEditor/progressSingle.lua
        self._editing = true
        local serializedSaveData = jsonEncodePretty(self.missionInstance.saveData or "{}")
        local arraySize = 8*(2+math.max(128, 4*serializedSaveData:len()))
@/lua/vehicle/partCondition.lua

  writeFile("partConditionTest.json", jsonEncodePretty(data))
end
@/lua/ge/extensions/editor/missionEditor/progressSetup.lua
        self._editing = true
        local serializedSaveData = jsonEncodePretty(self.missionInstance.saveData or "{}")
        local arraySize = 8*(2+math.max(128, 4*serializedSaveData:len()))
@/lua/ge/extensions/editor/missionEditor/objectives.lua
        self._editing = true
        local serializedSaveData = jsonEncodePretty(self.mission.careerSetup or "{}")
        local arraySize = 8*(2+math.max(128, 4*serializedSaveData:len()))
@/lua/ge/extensions/tech/impactgen/crashOutput.lua
    parts = getRelevantParts(parts)
    parts = jsonEncodePretty(restructureParts(parts))
    setting.level = getLevelName()
    local scenario = jsonEncodePretty(setting)
    request:sendResponse({