Имеется файл формата json
Имеется файл json
пишет ошибку на строке
Результат.Вставить(ИмяЗначения, Значение);
несоответсвие параметров 1, насколько понимаю пытается записать то что туда записать не возможно
Функция ОбработкаJSON (ТекстJSON)
Результат = Новый Массив;
ЗапятыеСПереводомСтроки = ","+Символы.ПС;
ТекстJSON = СтрЗаменить(ТекстJSON, ЗапятыеСПереводомСтроки, "%%%%");
ТекстJSON = СтрЗаменить(ТекстJSON, ",", " ");
ТекстJSON = СтрЗаменить(ТекстJSON, "%%%%", ЗапятыеСПереводомСтроки);
ТекстJSON = СтрЗаменить(ТекстJSON, """", """"); // заменим последовательность " на "
ТекстJSON = СтрЗаменить(ТекстJSON, """", ""); // а теперь удалим все кавычки
Если Лев(ТекстJSON, 1) = "{" Тогда // начало структуры
ЗаполнитьДанныеИзОтветаJSON(Результат, ТекстJSON, "Структура");
ИначеЕсли Лев(ТекстJSON, 1) = "[" Тогда //начало массива
МассивДанных = Новый Массив;
ЗаполнитьДанныеИзОтветаJSON(МассивДанных, ТекстJSON, "Массив");
Результат.Вставить("Значение", МассивДанных);
КонецЕсли;
Возврат Результат;
КонецФункции
Процедура ЗаполнитьДанныеИзОтветаJSON(Результат, ТекстJSON, ТипДанных)
ТекстJSON = СокрЛП(Сред(ТекстJSON, 2)); // удалим открывающий символ структуры(массива)
ЗапятыеСПереводомСтроки = ","+Символы.ПС;
ТекстJSON = СтрЗаменить(ТекстJSON, ЗапятыеСПереводомСтроки, "%%%%");
ТекстJSON = СтрЗаменить(ТекстJSON, ",", " ");
ТекстJSON = СтрЗаменить(ТекстJSON, "%%%%", ЗапятыеСПереводомСтроки);
НомерЗначения = 0;
Пока ТекстJSON <> "" Цикл
ПервыйСимвол = Лев(ТекстJSON, 1);
Если ПервыйСимвол = "{" Тогда //вложенная структура
Значение = Новый Структура;
ЗаполнитьДанныеИзОтветаJSON(Значение, ТекстJSON, "Структура");
Если ТипДанных = "Структура" Тогда
Результат.Вставить("Значение" + ?(НомерЗначения = 0, "", НомерЗначения), Значение);
НомерЗначения = НомерЗначения + 1;
ИначеЕсли ТипДанных = "Массив" Тогда
Результат.Добавить(Значение);
КонецЕсли;
ИначеЕсли ПервыйСимвол = "[" Тогда //вложенный массив
Значение = Новый Массив;
ЗаполнитьДанныеИзОтветаJSON(Значение, ТекстJSON, "Массив");
Если ТипДанных = "Структура" Тогда
Результат.Вставить("Значение" + ?(НомерЗначения = 0, "", НомерЗначения), Значение);
НомерЗначения = НомерЗначения + 1;
Иначе
Результат.Добавить(Значение);
КонецЕсли;
ИначеЕсли ПервыйСимвол = "}" И ТипДанных = "Структура" Тогда //структура закончилась
ТекстJSON = СокрЛП(Сред(ТекстJSON, 2));
Если Лев(ТекстJSON, 1) = "," Тогда
ТекстJSON = СокрЛП(Сред(ТекстJSON, 2));
КонецЕсли;
Возврат;
ИначеЕсли ПервыйСимвол = "]" И ТипДанных = "Массив" Тогда //массив закончился
ТекстJSON = СокрЛП(Сред(ТекстJSON, 2));
Если Лев(ТекстJSON, 1) = "," Тогда
ТекстJSON = СокрЛП(Сред(ТекстJSON, 2));
КонецЕсли;
Возврат;
Иначе
Если ТипДанных = "Структура" Тогда
Поз = Найти(ТекстJSON, ":");
Если Поз = 0 Тогда
Прервать;
КонецЕсли;
ИмяЗначения = СокрЛП(Лев(ТекстJSON, Поз - 1));
ИмяЗначения = СтрЗаменить(ИмяЗначения, """", "");
ТекстJSON = СокрЛП(Сред(ТекстJSON, Поз+1));
Если Лев(ТекстJSON, 1) = "{" Тогда //значение является структурой
Значение = Новый Структура;
ЗаполнитьДанныеИзОтветаJSON(Значение, ТекстJSON, "Структура");
ИначеЕсли Лев(ТекстJSON, 1) = "[" Тогда //значение является массивом
Значение = Новый Массив;
ЗаполнитьДанныеИзОтветаJSON(Значение, ТекстJSON, "Массив");
Иначе // обычное значение
ПервыйКавычка = Ложь;
ПредпоследнийКавычка = Ложь;
Поз = 0;
Для Сч = 1 По СтрДлина(ТекстJSON) Цикл
Символ = Сред(ТекстJSON, Сч, 1);
Если Символ = """" Тогда
Если ПервыйКавычка Тогда
ПредпоследнийКавычка = Истина;
Иначе
ПервыйКавычка = Истина;
КонецЕсли;
КонецЕсли;
Если (Символ = "," И ((ПервыйКавычка И ПредпоследнийКавычка) Или (Не ПервыйКавычка И Не ПредпоследнийКавычка))) ИЛИ Символ = "]" ИЛИ Символ = "}" Тогда
Поз = Сч;
Прервать;
КонецЕсли;
КонецЦикла;
Если Поз = 0 Тогда
Значение = ТекстJSON;
ТекстJSON = "";
Иначе
Значение = Лев(ТекстJSON, Поз - 1);
Значение = СтрЗаменить(Значение, """", "");
ТекстJSON = СокрЛП(Сред(ТекстJSON, Поз + ?(Сред(ТекстJSON, Поз, 1) = ",", 1, 0)));
КонецЕсли;
Значение = СокрЛП(Значение);
КонецЕсли;
Если ТипЗнч(ИмяЗначения) = Тип("Строка") Тогда
Результат.Вставить(ИмяЗначения, Значение);
КонецЕсли;
ИначеЕсли ТипДанных = "Массив" Тогда //обычное значение
Поз = 0;
Для Сч = 1 По СтрДлина(ТекстJSON) Цикл
Символ = Сред(ТекстJSON, Сч, 1);
Если Символ = "," ИЛИ Символ = "]" ИЛИ Символ = "}" Тогда
Поз = Сч;
Прервать;
КонецЕсли;
КонецЦикла;
Если Поз = 0 Тогда
Значение = ТекстJSON;
ТекстJSON = "";
Иначе
Значение = Лев(ТекстJSON, Поз - 1);
Значение = СтрЗаменить(Значение, """", "");
ТекстJSON = СокрЛП(Сред(ТекстJSON, Поз + ?(Сред(ТекстJSON, Поз, 1) = ",", 1, 0)));
КонецЕсли;
Значение = СокрЛП(Значение);
Результат.Добавить(Значение);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция УстановитьСоединение(АдресСайта)
Соединение = Новый HTTPСоединение(АдресСайта,,,,,,);
Возврат Соединение;
КонецФункции
&НаКлиенте
Процедура Команда1(Команда)
Текст2=ПолучиьФайлИзИнтренета();
Рез= ОбработкаJSON(текст2);
//Рез2 = Новый Структура;
п=1;
КонецПроцедуры
Функция json(Объект)
Тип = ТипЗнч(Объект);
Если
Тип = Тип("Массив")
ИЛИ Тип = Тип("ТаблицаЗначений")
ИЛИ Тип = Тип("СписокЗначений")
Тогда
Количество = Объект.Количество();
Результат = "[";
Для н = 0 ПО Количество - 1 Цикл
Результат = Результат + json(Объект[н]) + ?(н < Количество - 1, ", ", "");
КонецЦикла;
Результат = Результат + "]";
Возврат Результат;
ИначеЕсли Тип = Тип("Структура") Тогда
н = 0;
Количество = Объект.Количество();
Результат = "{";
Для Каждого Пара Из Объект Цикл
Результат = Результат + json(Пара.Ключ) + ": " + json(Пара.Значение) + ?(н < Количество - 1, ", ", "");
н = н + 1;
КонецЦикла;
Результат = Результат + "}";
Возврат Результат;
ИначеЕсли Тип = Тип("СтрокаТаблицыЗначений") Тогда
Результат = "{";
Колонки = Объект.Владелец().Колонки;
Количество = Колонки.Количество();
Для н = 0 ПО Количество - 1 Цикл
Ключ = Колонки[н].Имя;
Результат = Результат + json(Ключ) + ": " + json(Объект[Ключ]) + ?(н < Количество - 1, ", ", "");
КонецЦикла;
Результат = Результат + "}";
Возврат Результат;
ИначеЕсли Тип = Тип("ЭлементСпискаЗначений") Тогда
Возврат json(Объект.Значение);
ИначеЕсли Тип = Тип("Строка") Тогда
Результат = Объект;
Результат = СтрЗаменить(Результат, "\", "\\");
Результат = СтрЗаменить(Результат, "/", "\/");
Результат = СтрЗаменить(Результат, """", "\""");
Результат = СтрЗаменить(Результат, Символы.ВК, "\r");
Результат = СтрЗаменить(Результат, Символы.Таб, "\t");
Результат = СтрЗаменить(Результат, Символы.ПС, "\n");
Возврат """" + Результат + """";
ИначеЕсли Тип = Тип("Число") Тогда
Возврат Формат(Объект, "ЧРД=.; ЧН=0; ЧГ=0");
ИначеЕсли Тип = Тип("Булево") Тогда
Возврат Формат(Объект, "БЛ=false; БИ=true");
ИначеЕсли Тип = Тип("Дата") Тогда
Возврат json(Формат(Объект, "ДФ=yyyy-MM-ddThh:mm:ss"));
ИначеЕсли
Объект = Неопределено
ИЛИ Объект = Null
Тогда Возврат "null";
ИначеЕсли
Справочники.ТипВсеСсылки().СодержитТип(Тип)
Или Документы.ТипВсеСсылки().СодержитТип(Тип)
Тогда
Возврат json(Объект.УникальныйИдентификатор());
Иначе
Возврат json(Строка(Объект));
КонецЕсли;
КонецФункции
ПоказатьИмеется файл json
{"itemserviceresult": {
"serviceMetaData": [
{
"version": "3.0.2"
}
],
"transactionArea": [
{
"response": {
"returnCode": "0",
"returnMsg": "",
"success": true
},
"responseSequence": {
"transactionTime": "65.333 ms",
"queryTime": "0 ms",
"dbTime": "0 ms",
"totalItems": 69,
"resources": [],
"qq": 150
}
}
],
"data": [
{
"resources": [
{
"type": "search",
"uri": "https://www.arrow.com/en/products/search?q=bav99"
}
],
"PartList": [
{
"itemId": 34718706,
"partNum": "BAV99",
"manufacturer": {
"mfrCd": "RECTRON",
"mfrName": "Rectron"
},
"desc": "BAV99",
"packageType": "",
"resources": [
{
"type": "cloud_part_detail",
"uri": "http://www.arrow.com/en/products/bav99/rectron"
},
{
"type": "api_part_detail",
"uri": "http://api.arrow.com/itemservice/v2/en/detail?mfrCd=RECTRON&partNum=BAV99"
},
{
"type": "part_detail",
"uri": "http://api.arrow.com/itemservice/v2/en/detail?pkey=ONDR-dhZVz54VOs9nh821fDCQXJd4nS6qfZFYx3BwDU"
}
],
"EnvData": {
"compliance": [
{
"displayLabel": "eurohs",
"displayValue": "n/a"
},
{
"displayLabel": "cnrohs",
"displayValue": "n/a"
}
]
},
"InvOrg": {
"sources": [
{
"currency": "USD",
"sourceCd": "ACNA",
"displayName": "Arrow Americas",
"sourceParts": [
{
"packSize": 1,
"minimumOrderQuantity": 1,
"sourcePartNumber": "",
"sourcePartId": "V99:2348_18303851",
"Prices": {
"resaleList": [
{
"displayPrice": "0.2069",
"price": 0.2069,
"minQty": 1,
"maxQty": 999999999
}
]
},
"Availability": [
{
"fohQty": 47,
"availabilityCd": "INSTK",
"availabilityMessage": "In Stock",
"pipeline": [
{
"delivery": "10-DEC-2018",
"quantity": 9047
}
]
}
],
"customerSpecificPricing": [],
"customerSpecificInventory": [],
"dateCode": "1805",
"resources": [
{
"type": "detail",
"uri": "https://www.arrow.com/en/products/bav99/rectron"
},
{
"type": "add_to_cart",
"uri": "https://www.arrow.com/en/products/bav99/rectron"
}
],
"inStock": true,
"mfrLeadTime": 0,
"isNcnr": false,
"isNpi": false,
"isASA": false,
"requestQuantity": 0,
"productCode": "",
"iccLevels": [],
"cloudMfrCode": "",
"eccnCode": "EAR99",
"htsCode": "",
"containerType": ""
},
{
"packSize": 3000,
"minimumOrderQuantity": 3000,
"sourcePartNumber": "",
"sourcePartId": "V36:1790_18303851",
"Prices": {
"resaleList": [
{
"displayPrice": "0.0588",
"price": 0.0588,
"minQty": 3000,
"maxQty": 29999
},
{
"displayPrice": "0.0550",
"price": 0.0550,
"minQty": 30000,
"maxQty": 299999
},
{
"displayPrice": "0.0334",
"price": 0.0334,
"minQty": 300000,
"maxQty": 1499999
},
{
"displayPrice": "0.0235",
"price": 0.0235,
"minQty": 1500000,
"maxQty": 999999999
}
]
},
"Availability": [
{
"fohQty": 0,
"availabilityCd": "NOSTK",
"availabilityMessage": "No Stock",
"pipeline": [
{
"delivery": "06-JUN-2019",
"quantity": 9000
}
]
}
],
"customerSpecificPricing": [],
"customerSpecificInventory": [],
"dateCode": "",
"resources": [
{
"type": "detail",
"uri": "https://www.arrow.com/en/products/bav99/rectron"
},
{
"type": "add_to_cart",
"uri": "https://www.arrow.com/en/products/bav99/rectron"
}
],
"inStock": false,
"mfrLeadTime": 0,
"isNcnr": false,
"isNpi": false,
"isASA": false,
"requestQuantity": 0,
"productCode": "",
"iccLevels": [],
"cloudMfrCode": "",
"eccnCode": "EAR99",
"htsCode": "",
"containerType": ""
},
Показатьпишет ошибку на строке
Результат.Вставить(ИмяЗначения, Значение);
несоответсвие параметров 1, насколько понимаю пытается записать то что туда записать не возможно
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Зачем этот бессмысленный код в шапке?
Откройте для себя платформенные функции ПрочитатьJSON и ЗаписатьJSON. Они работают на порядок быстрее хардкода.
А если база на 82 - тогда на ИС полно реализаций чтения json работающих.
Откройте для себя платформенные функции ПрочитатьJSON и ЗаписатьJSON. Они работают на порядок быстрее хардкода.
А если база на 82 - тогда на ИС полно реализаций чтения json работающих.
Согласен с palsergeich, используйте методы платформы для работы с JSON.
В вашем же случае скорее всего Результат имеет тип данных структура,
а в ИмяЗначения строка, которая не подходит под требования поля "Ключ" в структуре (например ,содержит пробел).
В вашем же случае скорее всего Результат имеет тип данных структура,
а в ИмяЗначения строка, которая не подходит под требования поля "Ключ" в структуре (например ,содержит пробел).
присоединяюся к пожеланиям выше.
проверте ИмяЗначения - что оно содержит,
согласно требований СП ключ структуры Результат: "При этом ключ может быть только строковым и должен удовлетворять требованиям, предъявляемым к именованию переменных встроенного языка." - то есть первый символ должен быть буквой, а не числом или другим знаком
проверте ИмяЗначения - что оно содержит,
согласно требований СП ключ структуры Результат: "При этом ключ может быть только строковым и должен удовлетворять требованиям, предъявляемым к именованию переменных встроенного языка." - то есть первый символ должен быть буквой, а не числом или другим знаком
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот