Парсит строку конфига и складывает результат в список словарей. Исходный формат крайне упрощенная и менее формальная версия JSON. Внутри каждого блока может быть произвольное количество подблоков выделенных скобками определения блока.
Пример: string = '{i = 4, p = 100}, {t = 4, e = 100, n = {{m = 4, r = 100}, n = name}}'
Пример: string = 'value1, value2, value3'
Основная функция: jsonify(string, _unwrap_it=None, **params)
, где:
- string - исходная строка для парсинга
- params - параметры парсинга, в том числе режим работы.
Пример: config_json = gsparser.jsonify(string, mode='v2', to_num=False)
Т.е. будет использовать парсинг версии 2 и числовые значения останутся не будут переведены в числа (останутся строками).
Все словари всегда будут завернуты в список!
Строка: 'one = two, item = {count = 4.5, price = 100, name = {name1 = name}}'
Результат:
{
"one": "two",
"item": [
{
"itemsCount": 4.5,
"price": 100,
"name": [
{
"name1": "my_name"
}
]
}
]
}
Разворачивает все списки единичной длины. Для заворачивания необходимо указать в ключе команду 'list'.
Сама команда (все что после указателя команды) в итоговом JSON будет отрезано. См. символ sep_func
Строка: 'one!list = two, item = {сount = 4.5, price = 100, name!list = {n = m, l = o}}'
Результат:
{
"one": [
"two"
],
"item": {
"count": 4.5,
"price": 100,
"name": [
{
"n": "m",
"l": "o"
}
]
}
}
- list - заворачивает содержимое в список только если это не список
- flist - всегда заворачивает в дополнительный список, даже списки!
ВАЖНО! Служебный параметр, указание нужно ли разворачивать получившуюся после парсинга структуру. Определяется автоматически.
Нужно ли вытаскивать словари из списков единичной длины.
False (по умолчанию) - вытаскивает из списков все объекты КРОМЕ словарей.
True - вынимает из список ВСЕ типы объектов, включая словари. ВАЖНО! Настройка игнорирует команды mode = v2, если список можно развернуть, то он обязательно будет развернут!
Строка: 'one!list = two, item = {count = 4.5, price = 100, name!list = {name1 = name}}'
Результат:
{
"one": "two",
"item": {
"count": 4.5,
"price": 100,
"name": {
"name1": "my_name"
}
}
}
Тип скобок выделяющих подблоки. '{}' по умолчанию.
Тип скобок выделяющих списки. '[]' по умолчанию.
ВАЖНО! Нельзя переопределять значение по умолчанию!
Внутри допустима любая вложенность, но исключительно в синтаксисе python.
Нельзя одновременно использовать упрощенный синтаксис и квадратные скобки! Строки обязательно обрамлены кавычками, словари с полным соблюдением синтаксиса!
Строка: ['one', ['two', 3, 4], {'one': 'the choose one!'}]
Результат:
[
"one",
[
"two",
3,
4
],
{
"one": "the choose one!"
}
]
Аналогичного результата можно достигнуть и классическим, упрощенным синтаксисом. Строка {one, {two, 3, 4}, {one = the choose one!}}
даст идентичный верхнему результат. Может пригодиться для задания, например, пустых списков или простых конструкций.
Базовый разделитель элементов. ',' - по умолчанию.
Разделитель ключ-значение элементов словаря. '=' - по умолчанию.
Синтаксический сахар для разделения блоков. '|' - по умолчанию.
Запись: '0, 6| 7 = 7, zr = 0, one, tw = {2 = d}, tv = {2 = dv | 3 = tr} | a, b'
,
будет идентична: '{0, 6}, {7 = 7, zr = 0, one, tw = {2 = d}, tv = {{2 = dv}, {3 = tr}}}, {a, b}'
,
Разделитель указания функций. '!' - по умолчанию.
Например: key!list означает, что содержимое ключа key обязательно будет списком.
См. все актуальные доступные команды в функции parse_command()
Нужно ли пытаться преобразовывать значения в числа.
True (по умолчанию) - пытается преобразовать.
False - не преобразовывать. Числовые значения будут разобраны как строки.
Символ маркирующий строку которую не нужно разбирать.
'"' (двойная кавычка) - по умолчанию. Строка которую не нужно разбирать должна быть обрамлена этим символом с обеих сторон.
Строки начинающиеся с символа raw_pattern не парсятся и сохраняются как есть.
Указание надо ли парсить строку или нет. False по умолчанию.
False (по умолчанию) - парсит строку по всем правилам, с учётом raw_pattern.
True - не парсит, возвращает как есть.