2015-06-30 2 views
0

Использование SSLLABS-SCAN для аудита ssl на разных сайтах, это выводит один. Форматированный файл .json с массивом для каждого хоста.Разбор нескольких массивов в json из файла с использованием Lua

Я использую модуль Lua json для декодирования содержимого файла .json. Я могу прочитать файл и распечатать его, но не могу заставить парсинг работать. Это должно быть достаточно просто, я пробовал как json, так и cjson как модуль безрезультатно.

urls.json где весь выход заканчивается для всех узлов, которые были сканированных

[JSON-данные для хоста 1 { «ключ»: «значение», «ключ»: «значение» ....} ] [json-data для хоста n {"key": "value", "key": "value" ....}]

Я проверил и файл .json правильно отформатирован.

Я выбросил весь предыдущий код и начал работу. Отметив, что когда я читаю файл, он форматируется как строка, xfile только, кажется, получает одну пару k, v.


local cjson = require "cjson" 
local json = require "json" 

io.input("urls.json") 
file = io.read("*all") 
-- the below prints file = string 
    print ("file = ",type(file)) 
-- init the table named xfile 
xfile = {} 
xfile = json.decode(file) 
-- the below prints xfile = table 
print ("xfile = ", type(xfile)) 

-- the below prints i=1 
for i=1,#xfile do 
    print ("i=",i) 
end 
-- the below prints 1 table: 0x987230 
for k,v in pairs(xfile) do 
    print (k,v) 
end 
io.close() 
+0

Не могли бы вы предоставить тестовый пример, какой-то JSON, где он не работает? – ryanpattison

+0

привет, на самом деле это не так. Это просто ничего не делает. Я проанализировал json-файл с jsonpipe и json2lua, которые отлично работают. Нет образца JSON на данный момент, он выводится из https://github.com/ssllabs/ssllabs-scan Обратите внимание Не использовать -json-flat = true для вывода, поскольку он не анализирует существующие модули lua –

+0

проверить [эту ссылку] (http://hastebin.com/liqubetela.tex) для данных примера json –

ответ

0

Как указано в комментариях, все декодированные данные JSon в на элементе 'значение' первого ключа в вашей Xfile таблице:

Используя sample file:

...  
local json_data = xfile[1] or {} 
print("First entry hostname: ", tostring(json_data["host"])) 

мощность:

Ели t имя входа: stackoverflow.com

+0

Это может быть только то, что мне нужно, поскольку json contians намного больше, чем мне нужно –

+0

Спасибо, что сработало для меня. Возможно, стоит отметить, что этот json вложен. Адресация вложенного элемента может быть выполнена, например, json_data ["endpoints"] [1] ["ipAddress"], чтобы получить простой вид на это дерево, используйте jsonpipe и замените/0/на [1] для использования с таблицами lua , –

+0

Он хорошо работает с тем, что я узнал. Осталось выяснить, как работать с таблицами в таблицах в таблицах и как обнаружить это из скрипта вместо разработки структуры. –

Смежные вопросы