Имя: Пароль:
1C
1С v8
Чтение json. Проблема
, , ,
0 progaoff
 
17.04.23
12:25
Добрый день, ребят, столкнулся с проблемой чтения json файла.
Есть хттп сервис, получает запросы, пишет в временный файл тело запроса. Потом его читает.

	ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку();
	
	ИмяВремянки = ПолучитьИмяВременногоФайла();
	
	ТекстовыйФайл = Новый ТекстовыйДокумент;
	ТекстовыйФайл.УстановитьТекст(ТелоЗапроса);		  
	ТекстовыйФайл.Записать(ИмяВремянки);
	ФайлJSON = Новый Файл(ИмяВремянки);
	
	ЧтениеJSON = Новый ЧтениеJSON;
	ЧтениеJSON.ОткрытьФайл(ИмяВремянки);
	СтруктураФайла = ПрочитатьJSON(ЧтениеJSON,,"ShipmentDate");


В один прекрасный день, вся эта конструкция отвалилась, причем тело json не менялось.
Ошибка при вызове метода контекста (ПрочитатьJSON)]
Помогите пожалуйста разобратся.
1 ChMikle
 
17.04.23
12:26
(0) удалили функцию прочитатьJson() ?
2 progaoff
 
17.04.23
12:27
(1) Нет))
3 Волшебник
 
17.04.23
12:28
кодировка?
формат?

какой текст ошибки?
4 ChMikle
 
17.04.23
12:28
(2) >>Ошибка при вызове метода контекста (ПрочитатьJSON)]
отладчик что говорит ?
5 Гипервизор
 
17.04.23
12:28
(0) Попробуйте прочитать в соответствие: ПрочитатьJSON(ЧтениеJSON, Истина,"ShipmentDate").
6 progaoff
 
17.04.23
12:29
(5) Ошибка при вызове метода контекста (ПрочитатьJSON) не помогает
7 Волшебник
 
17.04.23
12:29
покажите файл
8 Garykom
 
гуру
17.04.23
12:31
(0) Хотя бы полностью ошибку напиши
9 progaoff
 
17.04.23
12:32
ERP/hs/RefDoc/create/ЦБ00001/422
{
    "Code": "1111111",
    "Byer": "22222222",
    "DocumentCode": "--",
    "ShipmentDate": "2023-04-01T00:00:00",
    "Rows": [
        
        {
            "RowNumber": 1,
            "Code": "33333",
            "Quantity": 2,
            "Price": 66666,
            "GTD": "1111111/111111/11111",
            "CountryCode": "20",
            "SumWithoutNDS": 1,
            "SumNDS": 1,
            "SumWithNDS": 1
        }
    ]
}
10 progaoff
 
17.04.23
12:32
(8) Ошибка при вызове метода контекста (ПрочитатьJSON) больше инфы нет.
11 Волшебник
 
17.04.23
12:34
(9) файл нормальный
12 progaoff
 
17.04.23
12:35
(11) Ну как бы да, отвалилось причем без всяких на то причин, типа обновлений и прочего не было
13 Garykom
 
гуру
17.04.23
12:37
(10) так не бывает
дальше должно быть подробности почему
14 ChMikle
 
17.04.23
12:37
(12) может где еще определили эту функцию в модуле ?
15 progaoff
 
17.04.23
12:38
Ну вот ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку() - возвращает ERP/hs/RefDoc/create/ЦБ00001/422 и все
16 ChMikle
 
17.04.23
12:39
Страшная аббревиатура ERP, в ней все проблемы :)
17 Garykom
 
гуру
17.04.23
12:40
(13)+ ты только первую строку ошибки написал
напиши что дальше в ошибке
18 Гипервизор
 
17.04.23
12:40
(15) Так вам надо только то, что в {}.
19 Волшебник
 
17.04.23
12:42
(15) эту строку надо убрать. JSON - это то, что внутри фигурных скобок
20 Волшебник
 
17.04.23
12:43
кстати, пишется "Buyer", а не "Byer"
21 progaoff
 
17.04.23
12:45
(19) Так раньше с ней читало нормально.
22 progaoff
 
17.04.23
12:46
Ошибка при вызове метода контекста (ПрочитатьJSON): Непредвиденный символ при чтении JSON
В попытку обернул.
23 Волшебник
 
17.04.23
12:47
(21) Сомневаюсь
24 OldCondom
 
17.04.23
12:47
Пообщайся с тем, кто отправляет запрос
25 Волшебник
 
17.04.23
12:48
(22) Уберите первую строку. Объект JSON начинается и заканчивается фигурными скобками {}
26 Garykom
 
гуру
17.04.23
12:48
(22) Вот теперь ты уже ближе...

"Непредвиденный символ при чтении JSON"
27 OldCondom
 
17.04.23
12:48
http://json.parser.online.fr/ - пихни туда свой json и увидишь ту же самую ошибку.
Это не json
28 Garykom
 
гуру
17.04.23
12:50
(22) >В попытку обернул.

достаточно было в режиме предприятия при ошибке нажать на подробнее и там посмотреть
29 progaoff
 
17.04.23
12:58
Ну упорно говорит о том что данная строка была и проблем не было (24)
30 Garykom
 
гуру
17.04.23
13:00
(29) кто то врет
31 progaoff
 
17.04.23
13:01
(30) не в моих интересах это уж точно.
32 Волшебник
 
17.04.23
13:07
если "тело" содержит строку: ERP{"Code": "1111111"}", то найдите первую фигурную скобку и отсчитывайте от неё:

json = Сред(тело, СтрНайти(тело,"{"));
33 progaoff
 
17.04.23
13:15
(32) Ну судя по упертости с той стороны, так и прийдется делать
34 progaoff
 
17.04.23
13:16
(32) Спасибо!
35 progaoff
 
17.04.23
13:21
(32) ПолучитьТелоКакСтроку - только эту строку и возвращает. Больше ничего нет
36 Гипервизор
 
17.04.23
13:25
(35) В смысле возвращает только "ERP/hs/RefDoc/create/ЦБ00001/422" и всё? А остальное откуда?
37 progaoff
 
17.04.23
13:30
(36) Да, больше нет ничего.
38 progaoff
 
17.04.23
13:32
Если бы я хотя бы все тело видел, другой разговор. А так из ничего сделать что то, непонятно
39 OldCondom
 
17.04.23
13:34
забавно
40 Гипервизор
 
17.04.23
13:36
(37) А тогда откуда взялся текст в (9)?
41 progaoff
 
17.04.23
13:37
(40) Прислали с той стороны
42 программистище
 
17.04.23
13:46
УстановитьТелоИзСтроки(СокрЛП(СтрокаJSON),КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать), может те кто отправляют json что-то поменяли?
третий параметр до 8.3 был по умолчанию использовать, в 8.3 не использовать
и в старых базах приходилось указывать ИспользованиеByteOrderMark.НеИспользовать
хотя в 1с он игнорирует вроде BOM
но может поможет