|   |   | 
| 
 | Как обойти ограничение на длину JSON | ☑ | ||
|---|---|---|---|---|
| 0
    
        petya_ petrov_63 03.02.23✎ 11:35 | 
        Есть 1С:Розница. Надо для нее написать несколько HTTP сервисов для обмена с электронным кассиром. Споткнулся при реализации метода по выгрузке справочника номенклатура. В справочнике около 2000 единиц. При выгрузке справочника получаю ошибку при записи JSON. Для эксперимента ограничил выгрузку 10 единицами. Запись проходит нормально без каких-то либо сообщений. Сижу ломаю голову как сделать выгрузку частями.     | |||
| 1
    
        Aleksey 03.02.23✎ 11:36 | 
        а почему решил что ошибка в длине, а не в данных?     | |||
| 2
    
        KJlag 03.02.23✎ 11:36 | 
        (0) перейти с Get на Post ?     | |||
| 3
    
        Aleksey 03.02.23✎ 11:38 | 
        Короче нужен как минимум текст ошибки     | |||
| 4
    
        Kassern 03.02.23✎ 11:41 | 
        (0) Вы скорее уперлись в ограничение get и передаете строку не в теле запроса как написали в (2) 
 Нет у json ограничения, хоть километровые мантры пишите. | |||
| 5
    
        НафНаф 03.02.23✎ 11:42 | 
        ошибку конечно никто не озвучит?     | |||
| 6
    
        Aleksey 03.02.23✎ 11:42 | 
        (4) есть ограничения со стороны приемника (память у кассы не резиновая)     | |||
| 7
    
        novichok79 03.02.23✎ 11:44 | 
        не ну а чо, качайте телепатию.     | |||
| 8
    
        Aleksey 03.02.23✎ 11:46 | 
        а так браузере тоже по умолчанию понимают строку порядка 8кб (с учетом того что русские буквы занимают 2 байта, получается чуть более 4к символов), далее только (2)     | |||
| 9
    
        Мультук гуру 03.02.23✎ 11:49 | 
        (0) 
 Неужели сложно показать небольшой кусок кода и текст ошибки ? >> Сижу ломаю голову как сделать выгрузку частями. Нужно читать api этого самого электронного кассира | |||
| 10
    
        petya_ petrov_63 03.02.23✎ 11:50 | 
        (2) он post-ом и написан
 (6) приемник не касса, а сайт на терминале (3) сейчас сделаю ошибку будет и текст | |||
| 11
    
        petya_ petrov_63 03.02.23✎ 11:51 | 
        Ошибка при вызове метода контекста (ЗаписатьJSON)
 {СозданиеЧекаККМБаня ОбщийМодуль.ФСТ_ЭлектронныйКассир.Модуль(970)}: ЗаписатьJSON(Запись, Значение); {СозданиеЧекаККМБаня ОбщийМодуль.ФСТ_ЭлектронныйКассир.Модуль(868)}: СтрокаJSON = ПреобразоватьДанныеВJSON(ДанныеДляОтвета); {СозданиеЧекаККМБаня HTTPСервис.ЭК_HTTPМодуль.Модуль(64)}: ТелоОтвета = ФСТ_ЭлектронныйКассир.НоменклатураТоваров(ТелоЗапроса); по причине: Передано значение недопустимого типа | |||
| 12
    
        Aleksey 03.02.23✎ 11:52 | 
        "Передано значение недопустимого типа" - ну и какие тут могут быть вопросы?     | |||
| 13
    
        KJlag 03.02.23✎ 11:53 | 
        (11) и шо тебе говорит отладка? что там в Запись и в Значение?     | |||
| 14
    
        Kassern 03.02.23✎ 11:54 | 
        (11) "Передано значение недопустимого типа"<>"ограничение на длину JSON"     | |||
| 15
    
        mikecool 03.02.23✎ 11:55 | 
        (11) проверяй в первую очередь даты, возможно их криво укладываешь     | |||
| 16
    
        Aleksey 03.02.23✎ 11:55 | 
        как можно ошибку "Передано значение недопустимого типа" прочитать как "данные не могут быть записаны, так как достигнуто ограничения на длину JSON"?     | |||
| 17
    
        Aleksey 03.02.23✎ 11:55 | 
        (15) ну 10 единиц выгружено, значит с логикой укладки там должно быть норма. Проблема в самих данных     | |||
| 18
    
        Kassern 03.02.23✎ 11:57 | 
        (11) Открываете любой онлайн сервис json и пихаете туда текст, который отправляете. Смотрите на строчки, на которые ругается парсер и делаете выводы.     | |||
| 19
    
        lodger 03.02.23✎ 12:00 | 
        (11) в 10 выбранных позициях данные ровные, удобные, а вот в 2000 где-то есть NULL или подобная чепуха.     | |||
| 20
    
        lodger 03.02.23✎ 12:02 | 
        (19) чтобы не чесать голову с поиском где именно не считан реквизит, то можно просто в ИмяФункцииПреобразования передать функцию, где сравнишь значение с NULL и отдашь "".
 ЗаписатьJSON(<ЗаписьJSON>, <Значение>, <НастройкиСериализации>, <ИмяФункцииПреобразования>, <МодульФункцииПреобразования>, <ДополнительныеПараметрыФункцииПреобразования>) | |||
| 21
    
        Галахад гуру 03.02.23✎ 12:02 | 
        "СозданиеЧекаККМБаня", что за баня? Как корабль назовешь, так и будешь парится... ))     | |||
| 22
    
        petya_ petrov_63 03.02.23✎ 12:02 | 
        рикуда ошибка длины а не типов: ограничив цикл 10 проходами получаю нормальную запись JSON-а.     | |||
| 23
    
        KJlag 03.02.23✎ 12:03 | 
        (11) как вариант, запросом вытянуть данные на 2000 объектов.
 а потом по 10 в попытке пихать в джейсунь, в исключении сделать вывод этих объектов в удобном формате (в файл, в тч, просто сообщить и тд) | |||
| 24
    
        lodger 03.02.23✎ 12:03 | 
        (22) перечитай (19)     | |||
| 25
    
        Aleksey 03.02.23✎ 12:05 | 
        (22) По всем позициям? Или по первым 10? Откуда уверенность что 101 позиции в наименовании нет спецсимвола (ковычки или таб), которые ломают json?     | |||
| 26
    
        KJlag 03.02.23✎ 12:06 | 
        (25) он разве спецсимвол не экранирует по умолчанию?     | |||
| 27
    
        Kassern 03.02.23✎ 12:06 | 
        (22) Почитайте уже https://www.json.org/json-en.html и сделайте выводы.     | |||
| 28
    
        Kassern 03.02.23✎ 12:06 | 
        По-русски https://www.json.org/json-ru.html     | |||
| 29
    
        Kassern 03.02.23✎ 12:08 | 
        В общем у вас не экранируемые данные передаются. Наименование какой нибудь позиции имеет спец символы, которые нужно экранировать. В первых 10позициях таких символов нет, поэтому у вас все проходит.     | |||
| 30
    
        Kassern 03.02.23✎ 12:10 | 
        Делаю ставку на слеш( обратный слеш) в имени номенклатуры)     | |||
| 31
    
        Aleksey 03.02.23✎ 12:10 | ||||
| 32
    
        vde69 03.02.23✎ 12:11 | 
        у жсонов есть ограничение на уровень вложености, может дело в рекурсии иерархии? или еще в чем? 
 глубже 200 уровней вложености вроде есть проблемы | |||
| 33
    
        petya_ petrov_63 03.02.23✎ 12:12 | 
        (32) вложенность маленькая - 4 уровня вроде.
 (30) идея, возможно верна, так как NULL все в запросе через ISNULL заменил на строки ... | |||
| 34
    
        Смотрящий 03.02.23✎ 12:14 | 
        (11) У тебя где то в жисоне объект 1С затесался.
 Вместо строки наименования справочника пишешь ссылку на справочник, например. | |||
| 35
    
        lodger 03.02.23✎ 12:16 | 
        (34) или перечисление в какой-нибудь ставкеНДС     | |||
| 36
    
        OldCondom 03.02.23✎ 12:16 | 
        Откуда такая нелюбовь к отладчику? Галочка "Остановливать при ошибке" и вопрос исчерпан.     | |||
| 37
    
        KJlag 03.02.23✎ 12:17 | 
        гадать будем вечно, пока тс не чекнет что там пытается записаться в джейсунь.
 или не запустит по элементную запись в джейсунь с остановкой при ошибке | |||
| 38
    
        Kassern 03.02.23✎ 12:20 | 
        (34) "вместо строки наименования справочника пишешь ссылку на справочник" - это норм отрабатывает, просто будет гуид передаваться.     | |||
| 39
    
        Kassern 03.02.23✎ 12:21 | 
        Это xml загибается на ссылке, если не использовать XMLСтрока     | |||
| 40
    
        Смотрящий 03.02.23✎ 12:21 | 
        (38) Не отрабатывает норм     | |||
| 41
    
        petya_ petrov_63 03.02.23✎ 12:21 | 
        (36) кто сказал, что нелюбовь: Именно остановка на ошибке и срабатывает.     | |||
| 42
    
        Kassern 03.02.23✎ 12:26 | 
        (40) Точно, как раз ошибка "Передано значение недопустимого типа" если пытаться ссылку пихнуть     | |||
| 43
    
        Kassern 03.02.23✎ 12:27 | 
        (41) Ну так посмотрите что передаете в запись json на момент ошибки. (останавливаться по ошибке = истина)     | |||
| 44
    
        НафНаф 03.02.23✎ 13:14 | 
        СозданиеЧекаККМБаня - романтичненько     | |||
| 45
    
        petya_ petrov_63 03.02.23✎ 14:08 | 
        Косяк оказался в названии номенклатуры ""Аренда по договору РБС-АР-1356/12 от 01.04.2012""     | |||
| 46
    
        Kassern 03.02.23✎ 14:10 | 
        (45) сыграла моя ставочка)     | |||
| 47
    
        Kassern 03.02.23✎ 14:11 | 
        На будущее, в УстановитьСтроку указывайте параметры с экранированием и будет вам счастье     | |||
| 48
    
        petya_ petrov_63 03.02.23✎ 14:14 | 
        (47) параметр с экранированием, это функция по преобразованию значения не соответствующего формату JSON или что-то иное?     | |||
| 49
    
        Kassern 03.02.23✎ 14:15 | 
        (48) ПараметрыЗаписиJSON=Новый ПараметрыЗаписиJSON(...);
 ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON); | |||
| 50
    
        Kassern 03.02.23✎ 14:15 | 
        Новый ПараметрыЗаписиJSON - там как раз все экранирования есть, посмотрите в СП     | |||
| 51
    
        petya_ petrov_63 03.02.23✎ 14:22 | 
        ЭкранироватьСлеш - оно?     | |||
| 52
    
        Kassern 03.02.23✎ 14:23 | 
        (51) пробуйте)     | |||
| 53
    
        Kassern 03.02.23✎ 14:23 | 
        (51) вам даже пример скинули в (31)     | |||
| 54
    
        petya_ petrov_63 03.02.23✎ 15:02 | 
        Поправил
 Функция ПреобразоватьДанныеВJSON(Значение) Экспорт ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(,,,ЭкранированиеСимволовJSON.СимволыВнеASCII,Истина,Истина,Истина,Истина,Истина); Запись = Новый ЗаписьJSON; Запись.УстановитьСтроку(ПараметрыЗаписиJSON); ЗаписатьJSON(Запись, Значение); Возврат Запись.Закрыть(); КонецФункции Но все равно выходит ошибка. ЧЯДНТ? | |||
| 55
    
        petya_ petrov_63 03.02.23✎ 15:06 | 
        Валится также на том же самом значении
 Аренда по договору РБС-АР-1356/12 от 01.04.2012 | |||
| 56
    
        lodger 03.02.23✎ 15:10 | 
        <ЭкранироватьСлеш> (необязательный)
 Тип: Булево. Определяет, будет ли экранироваться слеш (косая черта) при записи значения. Значение по умолчанию: Ложь. интересно, они про \ или про / ? | |||
| 57
    
        Kassern 03.02.23✎ 15:10 | 
        (55) Что-то вы делаете не так. Вот ваш пример: https://disk.yandex.ru/i/WGhJApHDHN8rDA     | |||
| 58
    
        Kassern 03.02.23✎ 15:11 | 
        (56) про /     | |||
| 59
    
        Kassern 03.02.23✎ 15:11 | 
        \ - обратный слеш     | |||
| 60
    
        petya_ petrov_63 03.02.23✎ 17:13 | 
        (57) но что? Набрал пример нормально работает, а моя процедура не срабатывает.     | |||
| 61
    
        Kassern 03.02.23✎ 17:16 | 
        (60) посмотрите в отладке чем отличается ваш пример от моего.
 А вообще вы как-то странно json формируете. Зачем вы каждый раз новую запись json создаете? | |||
| 62
    
        magicSan 03.02.23✎ 17:55 | 
        тупо по 10 прогани весь товар увидишь где проблема     | |||
| 63
    
        petya_ petrov_63 03.02.23✎ 18:17 | 
        (62) где проблема я знаю. Как вариант я могу сделать доп функцию проверки наименования номенклатуры, но тут разговор о том, что есть решение стандартное, но оно не срабатывает. Вопрос почему.     | |||
| 64
    
        lodger 03.02.23✎ 18:32 | 
        вот тут (54)
 потенциально 2 дырки 1) <ЭкранированиеСимволов> (необязательный) может попробовать дефолтное значение 2) пара ключей ЭкранироватьОдинарныеКавычки и ИспользоватьДвойныеКавычки (они должны быть ложь\истина истина\ложь) у тебя первое по дефолту Истина, второе ты задал Истина, но: <ЭкранироватьОдинарныеКавычки> (необязательный) Тип: Булево. Определяет, будут ли экранироваться одинарные кавычки. Устанавливается в значение Истина, если ИспользоватьДвойныеКавычки установлено в Ложь. Значение по умолчанию: Ложь. | |||
| 65
    
        Aleksey 03.02.23✎ 18:50 | 
        (60) так может ты не на ту кнопочку нажал? Ты нажми на ту.     | |||
| 66
    
        petya_ petrov_63 03.02.23✎ 18:54 | 
        (64) в таком виде     ПараметрыЗаписиJson = Новый ПараметрыЗаписиJSON(,,,,,,,,Истина);
 тоже не срабатывает. Придется обойтись заплаткой - функцией замены символов. | |||
| 67
    
        magicSan 03.02.23✎ 19:09 | 
        (66) выгрузи по одному - совсем тупой чтоли?     | |||
| 68
    
        magicSan 03.02.23✎ 19:09 | 
        увидишь на каком элименте ошибка     | |||
| 69
    
        magicSan 03.02.23✎ 19:10 | 
        или то что в итоге записывается перехвати вставь в валидатор     | |||
| 70
    
        petya_ petrov_63 03.02.23✎ 20:11 | 
        Нашелся еще один не обработанный NULL, в той же строке где и слэш.
 Всем спасибо. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |