
Estou tentando adicionar uma tabela dinâmica baseada em uma matriz bidimensional armazenada como JSON em um arquivo no disco. Não tenho controle do arquivo, pois ele é extraído de um serviço da Web e os documentos são criados dinamicamente com base nele.
Como amostra do arquivo, é mais ou menos assim:
[
{"firstName":"John", "lastName":"Doe"},
{"firstName":"Anna", "lastName":"Smith"},
{"firstName":"Peter","lastName": "Jones"}
];
Responder1
Este é um bom exemplo onde LuaTeX é muito útil. Você pode facilmente carregar e analisar o arquivo JSON com ele e gravar os dados em uma tabela. Aqui está um exemplo:
\begin{filecontents*}{data.json}
[
{"firstName":"John", "lastName":"Doe"},
{"firstName":"Anna", "lastName":"Smith"},
{"firstName":"Peter", "lastName":"Jones"}
];
\end{filecontents*}
\documentclass{article}
\usepackage{luacode}
\begin{document}
\begin{luacode}
require("lualibs.lua")
local file = io.open('data.json')
local jsonstring = file:read('*a')
file.close()
local jsondata = utilities.json.tolua(jsonstring)
tex.print('\\begin{tabular}{cc}')
tex.print('\\hline\\textbf{Firstname} & \\textbf{Lastname} \\\\\\hline')
for key, value in pairs(jsondata) do
tex.print(value["firstName"] .. ' & ' .. value["lastName"] .. '\\\\')
end
tex.print('\\hline\\end{tabular}')
\end{luacode}
\end{document}
Saída:
Nota: Em lua *a
lê o arquivo inteiro, enquanto *l
seria usado para ler linha por linha, etc.manual da lua.