Плагин на поддержку синтаксиса в IntelijIDEA
TsonObj - базовый элемент TsonConfigurations Поддерживаемые типы данных:
- TsonString
"data"или'data' - TsonPrimitive:
- TsonBool
(true)или(false) - TsonClass
(java.lang.String)и.др - TsonInt
(10) - TsonFloat и TsonDouble
(10.5)
- TsonBool
- TsonList
[item1, item2, ... item-last] - TsonMap
{key=value, ... key-last=value-last} - TsonField
<(class), constructor-params>
TsonObj obj = ...
//проверить, тип данных
if(obj.isNumber()){
int integer = obj.getInt();
} else if (obj.isMap()){
TsonList list = obj.getMap().getList("key");
}TsonMap map = new TsonMap("{key='value'}");
TsonList list = new TsonList("['value1','value2']");class Example implements TsonSerelizable{
private final String k;
private final String v;
public Example(String k, String v){
this.k = k;this.v = v;
}
public Example(TsonMap mp){
k = mp.getStr("k");
v = mp.getStr("v");
}
@Override
public TsonObj toTson() {
TsonMap mp = new TsonMap();
mp.put("k", k);
mp.put("v",v);
return mp;
}
}TsonField<Example> filed = new TsonField<>(
"'<(Example), 'k1', 'v1'>'"
);
Example exm = field.getFiled();
//эквивалентно вызову new Example("k1", "v1")
//TsonField при чтении из строки вызывает
//new Example(tsonObj);Tson считает за примимитивы:
- Числа (Integer), (Float), (Double)
- Логические (true), (false)
- Все имена классов (java.lang.String) и т.д
TsonPrimitive primitive = TsonPrimitive.build("(10)");String strMap = "{key='value'}";
TsonMap map = new TsonMap(strMap);
//преобразование в строку, из которой можно восстановить объект
strMap = map.toString();
//преобразование в JSON строку. Использование TsonField не возможно.
String jsonString = map.toJsonStr();
//{"key": "value"}TJsonParser - обработчик синтаксиса JSON. Преобразует JSON строку в Tson-обьект.
Поддерживает как Обьектный ({key: 10}), так и словарный ({"key": 10}) режимы
//обьектный
new TJsonParser("{key: 10}", true).getMap();
//словарный, используется по умолчанию
new TJsonParser("{\"key\": 10}", false).getMap();При необходимости ограничить список классов, объекты которых
могут быть порождены TsonField, необходимо передать собственный ClassManager
в конструктор Tson компонента. Все дочерние объекты так же будут пораждены с использованием данного ClassManager.
ClassManager manager = new ClassManager(){
@Override
public Class<?> forName(String clazz) {
switch (clazz){
case "#": return Example.class;
case ...
}
throw new NoSearchException(clazz);
}
@Override
public Object newInstance(Class<?> clazz, Object... args)
throws InvocationTargetException, NoSuchMethodException,
InstantiationException, IllegalAccessException {
if(clazz == Example.class){
return new Example((String) args[0], (String) args[1]);
}
return TsonClass.createInst(clazz, args);
}
};
Example example = new TsonField<Example>(manager, "<(#), 'k1', 'v1'>").getField();TsonParser - обработчик синтаксиса Tson. Он же и отвечает за декодирование обьектов.
TsonOptimazer - инструмент, который уменьшает размер Tson коллекций, путем замещения дублирующихся неизменчивых обьектов на эквивалентные ссылки.
TsonParser допускает наличие произвольных символов, включая \t, \r.
По этой причине рекомендуется использовать TsonFile для считывания Tson из файла, который удаляет нежелательные символы:
new TsonFile("file.tson")
//или
new TsonFile(new File("file.tson")).load()