1с Jcon несответсвие параметров

1. FilippovRI 71 09.12.18 19:54 Сейчас в теме
Имеется файл формата json
	Функция Обработка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, насколько понимаю пытается записать то что туда записать не возможно
Найденные решения
2. palsergeich 10.12.18 01:01 Сейчас в теме
Зачем этот бессмысленный код в шапке?
Откройте для себя платформенные функции ПрочитатьJSON и ЗаписатьJSON. Они работают на порядок быстрее хардкода.
А если база на 82 - тогда на ИС полно реализаций чтения json работающих.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. palsergeich 10.12.18 01:01 Сейчас в теме
Зачем этот бессмысленный код в шапке?
Откройте для себя платформенные функции ПрочитатьJSON и ЗаписатьJSON. Они работают на порядок быстрее хардкода.
А если база на 82 - тогда на ИС полно реализаций чтения json работающих.
3. Unk92 273 10.12.18 08:00 Сейчас в теме
Согласен с palsergeich, используйте методы платформы для работы с JSON.
В вашем же случае скорее всего Результат имеет тип данных структура,
а в ИмяЗначения строка, которая не подходит под требования поля "Ключ" в структуре (например ,содержит пробел).
4. yaroslavkravets 24 11.12.18 00:43 Сейчас в теме
присоединяюся к пожеланиям выше.
проверте ИмяЗначения - что оно содержит,
согласно требований СП ключ структуры Результат: "При этом ключ может быть только строковым и должен удовлетворять требованиям, предъявляемым к именованию переменных встроенного языка." - то есть первый символ должен быть буквой, а не числом или другим знаком
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот