json

РaLmA

Новичок
Автор темы
6
0
Посмотрел на dev_wiki, ничего не понял. Не получается вводить таблицу в json и выводить её, киньте пожалуйста пример использования json. Спасибо.
 

Hideme Flow

Известный
571
200
Lua:
script_name("Read Json")

require "lib.moonloader" -- подключение библиотеки
local encoding = require 'encoding'

function main()
    while not  isSampAvailable() do wait(100) end
    sampRegisterChatCommand("getJson", getjson)
    while true do
         wait(0)
         --body
    end
end

function getjson()
    local fpath = getWorkingDirectory()..'\\Json_Info.json' -- какой файлик открыть
    if not doesFileExist(fpath) then
           local newfile = io.open(fpath, 'w') -- если его нету то он записывается
        newfile:write('{\n  "age": "14",\n  "name": "Nazar",\n  "IQ": "10"\n}')
        newfile:close()
    end
    local f = io.open(fpath, 'r') -- открывает файл
    if f then
        local info = decodeJson(f:read('*a')) -- читает
        sampAddChatMessage("Возраст - {FF0000}"..info.age..".{FFFFFF} Имя - {FF0000}"..info.name..". {FFFFFF}IQ - {FF0000}"..info.IQ..".", 0xFFFFFF)
    end
end
 
  • Нравится
Реакции: РaLmA

РaLmA

Новичок
Автор темы
6
0
Код:
function sampev.onCreate3DText(id, color, position, distance, testLOS, attachedPlayerId, attachedVehicleId, text)
    if active and text:find('%d+%s %d') then 
        homes[#homes + 1] = text 
        --sampAddChatMessage(text,0xffffff) 
        getjson(homes)
        return{id,color,position,distance,testLOS,attachedPlayerId,attachedVehicleId,text}
    end
end

function getjson(arg)
    local fpath = getWorkingDirectory()..'moonloader\\config\\houses.json' -- какой файлик открыть
    if not doesFileExist(fpath) then
           local newfile = io.open(fpath, 'w') -- если его нету то он записывается
        newfile:write(arg)
        newfile:close()
    end
    local f = io.open(fpath, 'r') -- открывает файл
    if f then
        local info = decodeJson(f:read('*a')) -- читает
        --sampAddChatMessage(, 0xFFFFFF)
    end
end
[19:51:00.513308] (error) HomesCheck: C:\Games\ar-01\moonloader\newfl.lua:31: attempt to index local 'newfile' (a nil value)
stack traceback:
C:\Games\ar-01\moonloader\newfl.lua:31: in function 'getjson'
C:\Games\ar-01\moonloader\newfl.lua:22: in function 'callback'
C:\Games\ar-01\moonloader\lib\samp\events\core.lua:79: in function <C:\Games\ar-01\moonloader\lib\samp\events\core.lua:53>
 

Hideme Flow

Известный
571
200
Код:
function sampev.onCreate3DText(id, color, position, distance, testLOS, attachedPlayerId, attachedVehicleId, text)
    if active and text:find('%d+%s %d') then
        homes[#homes + 1] = text
        --sampAddChatMessage(text,0xffffff)
        getjson(homes)
        return{id,color,position,distance,testLOS,attachedPlayerId,attachedVehicleId,text}
    end
end

function getjson(arg)
    local fpath = getWorkingDirectory()..'moonloader\\config\\houses.json' -- какой файлик открыть
    if not doesFileExist(fpath) then
           local newfile = io.open(fpath, 'w') -- если его нету то он записывается
        newfile:write(arg)
        newfile:close()
    end
    local f = io.open(fpath, 'r') -- открывает файл
    if f then
        local info = decodeJson(f:read('*a')) -- читает
        --sampAddChatMessage(, 0xFFFFFF)
    end
end
[19:51:00.513308] (error) HomesCheck: C:\Games\ar-01\moonloader\newfl.lua:31: attempt to index local 'newfile' (a nil value)
stack traceback:
C:\Games\ar-01\moonloader\newfl.lua:31: in function 'getjson'
C:\Games\ar-01\moonloader\newfl.lua:22: in function 'callback'
C:\Games\ar-01\moonloader\lib\samp\events\core.lua:79: in function <C:\Games\ar-01\moonloader\lib\samp\events\core.lua:53>
getWorkingDirectory() узнаёт путь вместе с /moonloader, то где Пеши getWorkingDirectory()..'\\config\\houses.json'
Весь код
Lua:
function sampev.onCreate3DText(id, color, position, distance, testLOS, attachedPlayerId, attachedVehicleId, text)
    if active and text:find('%d+%s %d') then 
        homes[#homes + 1] = text 
        --sampAddChatMessage(text,0xffffff) 
        getjson(homes)
        return{id,color,position,distance,testLOS,attachedPlayerId,attachedVehicleId,text}
    end
end



function getjson(arg)
    local fpath = getWorkingDirectory()..'\\config\\houses.json' -- какой файлик открыть
    if not doesFileExist(fpath) then
           local newfile = io.open(fpath, 'w') -- если его нету то он записывается
        newfile:write(arg)
        newfile:close()
    end
    local f = io.open(fpath, 'r') -- открывает файл
    if f then
        local info = decodeJson(f:read('*a')) -- читает
        --sampAddChatMessage(, 0xFFFFFF)
    end
end
 

РaLmA

Новичок
Автор темы
6
0
Lua:
script_name("Read Json")

require "lib.moonloader" -- подключение библиотеки
local encoding = require 'encoding'

function main()
    while not  isSampAvailable() do wait(100) end
    sampRegisterChatCommand("getJson", getjson)
    while true do
         wait(0)
         --body
    end
end

function getjson()
    local fpath = getWorkingDirectory()..'\\Json_Info.json' -- какой файлик открыть
    if not doesFileExist(fpath) then
           local newfile = io.open(fpath, 'w') -- если его нету то он записывается
        newfile:write('{\n  "age": "14",\n  "name": "Nazar",\n  "IQ": "10"\n}')
        newfile:close()
    end
    local f = io.open(fpath, 'r') -- открывает файл
    if f then
        local info = decodeJson(f:read('*a')) -- читает
        sampAddChatMessage("Возраст - {FF0000}"..info.age..".{FFFFFF} Имя - {FF0000}"..info.name..". {FFFFFF}IQ - {FF0000}"..info.IQ..".", 0xFFFFFF)
    end
end
Вот это высвечивает в консоли
[ML] (exception) HomesCheck: CJSON: Expected value but found T_END at character 1
 

Neon3333

Известный
182
71
Вот это высвечивает в консоли
[ML] (exception) HomesCheck: CJSON: Expected value but found T_END at character 1
Там функи кодирования/декодирования шалят, вынеси сначала результат чтения файла в отдельную переменную, а потом уже её докодируй, мне помогло.
 

РaLmA

Новичок
Автор темы
6
0
Там функи кодирования/декодирования шалят, вынеси сначала результат чтения файла в отдельную переменную, а потом уже её докодируй, мне помогло.
К сожалению, сообщение в консоль не изменилось
 

Neon3333

Известный
182
71
Можно ли что-то сделать с этим?
Перегони свою таблицу спомощью encodeJson() в json строку, сохрани в файл, потом прочитай от туда, будет все норм
Lua:
local yourTable = {"Маша", "Паша", "Дима"}

f = io.open('moonloader/file.txt','r+')
    if f == nil then
        f = io.open('moonloader/file.txt','w')
    end
    f:write(encodeJson(yourTable))
    f:flush()
    f:close()
 
Последнее редактирование: