Я ищу инструмент, желательно с лицензией FLOSS, который может делать что-то вроде следующего:
thetool --template mytemplate.c.someformat --data mydata.json --schema myschema.json --out myoutput.c
где thetool
находится исполняемый инструмент, который я ищу, mytemplate.c.someformat
мой файл шаблона выглядит как файл C, но с разметкой стиля шаблона для замены данных, mydata.json
содержит данные для заполнения шаблона, myschema.json
является схемой, объясняющей связи между элементами данных (приятно иметь, но не является строго обязательным) и myoutput.c
является сгенерированным файлом C.
Есть ли такой инструмент там? Ключевым моментом здесь является встроенная поддержка json, где сообщения об ошибках могут выделять проблемные области в исходном коде json. XML не вариант. Ему не обязательно иметь явную поддержку C. Он должен иметь возможность генерировать файлы в общем формате ASCII/UTF-8.
Он должен работать как инструмент командной строки как в Windows, так и в GNU/Linux. Также хорошо, если его можно слинковать как библиотеку из python или C.
синтаксис не проверен, так как мне нужен инструмент для этого.
#include <stdio.h>
int main(void) {
#{{ for person in persons }}
#{{ if person.likes.length > 0 }}
printf("#{{ person.name }} likes:\n");
#{{ for liked in person.likes }}
printf(" * #{{ likes.name }}\n");
#{{ endfor }}
#{{ else }}
printf("#{{ person.name }} doesn't like anyone.");
#{{ endif }}
printf("\n");
#{{ endfor }}
return(0);
}
{
"persons": {
{
"id": "10",
"name": "Mr Mister",
"likes": {
"20",
"22"
}
},
{
"id": "20",
"name": "Ms Missy",
"likes": {
"10",
}
},
{
"id": "22",
"name": "No Body",
"likes":
{}
}
},
"schema": "personSchema"
}
{
"personSchema": {
{
"id": {
"type": "integer",
"attrib": "unique"
}
"name": {
"type": "string"
}
"likes":
{
"type": "integer",
"connection": "personSchema.id"
}
}
}
}
#include <stdio.h>
int main(void) {
printf("Mr Mister likes:\n");
printf(" * Ms Missy\n");
printf(" * No Body\n");
printf("\n");
printf("Ms Missy likes:\n");
printf(" * Mr Mister\n");
printf("\n");
printf("No Body doesn't like anyone.");
printf("\n");
return(0);
}
Существует много языков программирования, множество механизмов шаблонов и множество синтаксических анализаторов JSON (и ваш запрос, похоже, находится в контексте программирования), поэтому просто объедините по одному из них, и вы получите то, что хотите.
Например, mustache — это простой формат шаблона с реализациями на многих различных языках, включая модуль Python pystache . (Сам он основан на CTemplate , который поставляется в виде библиотеки C++.)
Super User — это не служба написания сценариев, но вот кое-что для начала .
пользователь416
Йохан
Майк