svoboden, доброго дня. Постараюсь пояснить свою позицию.
1) Если взять сериализацию JSON на примере Вашего кода:
sR = "{""requests"":[{""insertText"":{""text"":""" & key & "\n"",""location"":{""index"":1}}}]}"
не делаю так по причинам:
а) В случае больших структур, хранить такой код в строковых переменных VBScript ПМСМ неудобно. Визуально режет глаз. Куча задвоенных кавычек для экранировки и если вытягивать выражение в линию, то получается нечитабельная строка, уползающая за экран. Много мест где можно ошибиться. Если вставлять переводы строк, то появляется куча амперсандов, нижних подчёркиваний. И хоть от части кавычек можно избавиться (имена параметров можно не брать в кавычки, если они не содержат пробелов), но всё равно ПМСМ неудобно:
Dim key: key = "test"
MsgBox "{" & _
"requests: [" & _
"{" & _
"insertText: {" & _
"text: """ & key & "\n""," & _
"location: {" & _
"index: 1" & _
"}" & _
"}" & _
"}" & _
"]" & _
"}"
б) Даже если "закрыть глаза на эстетику и красоту", то нельзя забывать про экранировку данных "инжектируемых" параметров.
У Вас в коде она не используется, так как подразумевается, что значение переменной key не принимает в себя символов подлежащих экранировке. В случае коллеги Домового, данные попадающие в запрос, вполне могут содержать такие. Тогда, если использовать Ваш код, то придётся вставлять обрамляющую функцию экранировки вокруг параметров, добавляемых в текст строки. К тому же у Домового запрос может содержать динамическое количество вложенных структур в блоке "conditions", а значит придётся делать вкрапления не только параметров, но и обрамляющих блоков:
{
"binary": {
"field": "first_name",
"operator": "=",
"value": "ЛЕОНИД"
}
}
В общем ПМСМ, опять неудобно... Мне кажется проще когда можно не задумываться о сборке строки вручную, а иметь функции сериализации и десериализации, надёжно отрабатывающие входные данные и выдающие результат готовый к использованию.
2) Что касается десериализации через execScript() / eval() - Вы наверняка не хуже меня знакомы с понятием "небезопасная JSON сериализация/десериализация". Но если вдруг нет - вот несколько ссылок для примера: ссылка 1, ссылка 2, ссылка 3
По этой причине не рискую использовать такой код:
window.execScript "var json = " & strJson, "JScript"
Доверяю библиотеке json2.js либо методам встроенного объекта JSON, получаемого из htmlfile. Он появляется в объекте window как свойство, начиная с IE9. (пример использования в моём коде выше.). Но вторым вариантом пользуюсь реже, так как он менее универсален. Не у всех же до сих пор установлен IE9 или тем более какой-то выше. К тому же он "молча глотает ошибки" при разборе невалидного JSON и приходится отлавливать их через window.onerror, что тоже не очень удобно.
А самый ад начинается когда доходит до разбора динамического ответа JSON. Очень неудобно в VBS анализировать - есть у объекта свойство или нет, перебирать элементы массива или свойства объекта, проверять внутренний тип данных. В JS для этого есть вся широта функционала, а для VBS это инородное тело.
Вот по всем этим причинам я и написал
На JS это всё куда проще и удобнее реализуется.
Пока что мне видится, что если есть крайняя необходимость реализовать всё на чистом VBScript, то можно заюзать aspJSON. Либо можно оформить весь механизм работы с сервисом в виде WSC, в котором будет реализован код на JS, а управление и получение данных организовать через экспортируемые методы и свойства в подходящем для VBSсript варианте.
P.S svoboden, обязательно хочу уточнить - совершенно ничего не имею против Вашего подхода. Да, можно делать и так, просто лично мне так не нравится. Поэтому я не написал, что "нельзя" / "карается законом" / "побойтесь бога !", а написал лишь - "на JS удобнее". А "неудобно" / "удобно" это часто субъективное понятие. Как говорится - на вкус и цвет...
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !