Код парсера
обновлён.
Изменения серьёзные, потому версию поднял до 4.0.
@chivononok
Ошибка исправлена.
@lmike
По поводу замены предложенной JSON_parseToDocumentExt на JSON_parseToDocumentSame, которая без параметра bReuse As Boolean - всё равно две функции, потому в параметре смысла не вижу. Тем более, что использование очень сильно отличается от стандартного (в описание функции). То есть, в зависимости от задачи, вызываем или одну или другую функцию.
По проблеме повреждения путей при постобработке unescape-символов.
Не хотел смешивать разбор json и постобработку, т.к. не очень хорошая идея, если класс делает несколько работ вместо одной... но не смог от этого уйти, потому что:
- во-1, json м.б. сложной структуры, и вовне его обработать будет уже сложнее;
- во-2, проверка элементов на то, нужно ли делать постобработку, делается внутри JSONParser.findElementString, и не хотелось нагружать ещё одним проходом...
Чтобы быстрее разобраться, как оно работает см. 2 доп. параметра в JSON_parse, а также константы UNESCAPE_RULE_... и доп. классы UnEscapeEngine...
Пример кода:
Visual Basic:
Dim s As String
s = |{"name":"Нэйма!","text":"Жучка-туручка \"вздрючила\" чучку.","path":"C:\\Program Files\\Apache Software Foundation\\Tomcat 9.0\\temp\\out9035214262981997167.pdf"}|
Dim lstUnescFields List As String
lstUnescFields("path") = UNESCAPE_RULE_PATH
Dim oJson As JSONList
Set oJson = JSON_parse(s, "", UNESCAPE_RULE_SIMPLE, lstUnescFields)
ForAll item In oJson.Items()
Print ListTag(item), item
End ForAll
В JSON_parse передаётся правило UNESCAPE_RULE_SIMPLE для обработки по умолчанию, а конкретно для поля "path" передаём правило обработки UNESCAPE_RULE_PATH.
Если для полей правила передавать ненужно (в большинстве случаев достаточно заданного правила по умолчанию), то в последнем параметре передаём Null.
Ребята, всем спасибо за код, помощь и идеи!