2017-02-09 10 views
2

Есть ли легкая, желательно чистая lua, библиотека для lua для анализа содержимого json? В основном я хочу увеличить свой ngnix с помощью модуля lua, который должен проверить некоторую информацию от объекта json, который я получаю от Redis.Как разобрать json в lua?

Объект выглядит следующим образом:

{ 
    "data": { 
    "user": { 
     "username": "username", 
     "type": "TYPE" 
    } 
    }, 
    "passport": { 
    "user": "uuid" 
    }, 
} 

В моем Lua коде, мне нужно проверить, если data.user.username существует. Затем я могу позволить nginx продолжить перенаправление. Может ли кто-нибудь, пожалуйста, показать мне пример того, как я могу это достичь?

+0

Легкий ответ просто выберите библиотеку, которая вам нравится. Там много из них: – moteus

+1

[1] (http://lua-users.org/wiki/JsonModules), [2] (https://github.com/Egor-Skriptunoff/json4lua) –

ответ

1

Данные JSON в этой форме очень близки к таблицам Lua. Таким образом, вы можете преобразовать данные JSON в код Lua и запустить его, если вы доверяете данным JSON.

J=[[ 
{ 
    "data": { 
    "user": { 
     "username": "username", 
     "type": "TYPE" 
    } 
    }, 
    "passport": { 
    "user": "uuid" 
    }, 
} 
]] 
L="return "..J:gsub('("[^"]-"):','[%1]=') 
T=loadstring(L)() 
print(T.data.user.username) 

Если есть какие-либо сомнения по поводу данных в формате JSON, вы можете запустить строку в L в песочнице.

+0

Зачем использовать loadstring ? – warspyking

+0

@warspyking, чтобы Lua проанализировал код. – lhf

+1

@warspyking Из-за «чистых луа» это почти наверняка самый быстрый. И это можно сделать [безопасным способом] (http://stackoverflow.com/a/41945465/805875). (Если в парсере Lua нет действительно уродливой ошибки, но это маловероятно.) Кроме того, существует разница в уровне угрозы между, например, веб-API, который обнаруживает неизвестные (и, скорее всего, некоторые вредоносные) данные, и инструмент, который вы используете для быстрой загрузки данных, созданных из какого-либо другого доверенного инструмента, работающего локально (даже если инструмент _that_ взаимодействует с сетью). – nobody