Чтение файла JSON (ошибка)

1. Barbos 08.02.18 14:54 Сейчас в теме
получаю ответ на запрос.
Ответ приходит в виде Json

кусок кода:
...
distribution":{
"0":35,
"200":30,
"400":18,
"600":8,
"800":5
}

так вот при выполнении кода:
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.ОткрытьФайл(ПутьКФайлу);
Ответ=ПрочитатьJSON(ЧтениеJSON);

Выдет ошибку:
{ВнешняяОбработка.ЭкспериментыJSON.Форма.Форма.Форма(67)}: Ошибка при вызове метода контекста (ПрочитатьJSON)
Ответ=ПрочитатьJSON(ЧтениеJSON);
по причине:
Недопустимое имя свойства: '800' для чтения JSON в объект Структура

Подскажите как быть?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. kild 89 08.02.18 22:12 Сейчас в теме
(1)
JSON

Формат ваших данных не соответствует стандарту JSON. Ключ должен быть строкой и 1с тут ни при чем.

http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf
Ожидается, что другие стандарты будут относиться к этому, строго придерживаясь текстового формата JSON, в то время как накладывая ограничения на различные детали кодирования. Такие стандарты могут потребовать определенного поведения. JSON сам не указывает никакого поведения.


Далее в стандарте (стр. 2) спецификация объекта JSON:

Структура объекта представлена ​​в виде пары фигурных фигурных скобок, окружающих нулевые или более пары имен/значений. Имя - это строка. Каждому имени соответствует один идентификатор двоеточия, отделяющий имя от значения. Один токен разделяет значение из следующего имени.

9. uno-c 235 28.12.20 19:36 Сейчас в теме
(6) Формат данных соответствует стандарту JSON. Имя - это строка. А строка в JSON - это символы, заключенные в кавычки. Отсутствует ограничение, что первый символ строки должен быть буквой. Структура представлена пятью парами имен/значений. Все имена - это строки. И 1С прочитает этот JSON путем Ответ=ПрочитатьJSON(ЧтениеJSON, Истина);
2. SPID 08.02.18 15:01 Сейчас в теме
При чтении создается структура. В структуре нельзя что бы ключи были числа. Читайте в соответствие.
Ответ=ПрочитатьJSON(ЧтениеJSON, Истина);
orfos; sstas007; user640247; CyclesOfID; lordguard; mip128; LomayaZakat; jane_de_rio; request4t; ulen; Prad2002; farraf; user845559; user712426; daab; Rustam10; adhocprog; timurhv; Andreyyy; +19 Ответить
3. kuld 248 08.02.18 15:02 Сейчас в теме
Что-то мне подсказывает, что такие обозначения свойств JSON объекта не приветствуются в 1С.
Как, спрашивается, обращаться к ним после парсинга в структуру? "СтруктураДанных.800"?
Вот оно на ранних подступах и выдает ошибку.
А то, что ругается на последнюю запись - это нормально. JSON парсится с хвоста.
adhocprog; +1 Ответить
4. Barbos 08.02.18 15:12 Сейчас в теме
(3)И как тогда поступить?
читать файл и заменять значения на символьные?
5. AnnieCoder 08.02.18 15:50 Сейчас в теме
(4) Вам в (2) уже подсказали, читайте файл json не в структуру, а в соответствие.
orfos; user1011519; user712426; +3 Ответить
7. kild 89 08.02.18 22:27 Сейчас в теме
(4) попробуйте <ПрочитатьВСоответствие>

Глобальный контекст.ПрочитатьJSON (Global context.ReadJSON)
Глобальный контекст (Global context)
ПрочитатьJSON (ReadJSON)
Синтаксис:

ПрочитатьJSON(<ЧтениеJSON>, <ПрочитатьВСоответствие>, <ИменаСвойствСоЗначениямиДата>, <ОжидаемыйФорматДаты>, <ИмяФункцииВосстановления>, <МодульФункцииВосстановления>, <ДополнительныеПараметрыФункцииВосстановления>, <ИменаСвойствДляОбработкиВосстановления>, <МаксимальнаяВложенность>)
Andreyyy; +1 Ответить
10. uno-c 235 28.12.20 19:43 Сейчас в теме
(3) После чтения в соответствие к ним нужно обращаться как к соответствию - Ответ["distribution"]["0"]. Либо Ответ.Получить("distribution").Получить("200")
Ошибку выдает, потому что идет попытка прочитать в структуру, а такой JSON можно прочитать только в соответствие.
8. Anton-i-oni 28.12.20 16:00 Сейчас в теме
Тут вот какая "петрушка". Получается как с программами переводчиками: переводишь слово на английский, и тут же полученное значение пытаешься перевести обратно на русский и получаешь совершенно другой результат.
Выгружаю пакет XDTO в JSON и пытаюсь его тут же прочитать в структуру и появляется ошибка "недопустимое имя свойства #value". Я понимаю, что это означает и, в результате, вынужден "читать" JSON в соответствие, но вот правильно ли это?
Запись пакета XDTO в JSON:
Запись = Новый ЗаписьJSON;
Запись.ПроверятьСтруктуру=Истина;
ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Unix);
Запись.УстановитьСтроку(ПараметрыЗаписи);
ФабрикаXDTO.ЗаписатьJSON(Запись, МойОбъектXDTO);
ДанныеJSON = Запись.Закрыть();

И ту же пытаюсь прочитать его в структуру
обЧтениеJSON = Новый ЧтениеJSON;
обЧтениеJSON.УстановитьСтроку(ДанныеJSON );
стСтруктураСхемы = ПрочитатьJSON(обЧтениеJSON);
и тут же получаем сообщение об ошибке "недопустимое имя свойства #value". Ну, все, поворчал, пошел работать дальше.
11. serverstar 63 18.05.21 17:38 Сейчас в теме
Вот и я мучаюсь с этой ошибкой ))
12. roman3d 103 07.09.21 14:12 Сейчас в теме
(11)
я делал так
Чтение = Новый ЧтениеJSON;
	ОтветСтрокой = Ответ.ПолучитьТелоКакСтроку(); 
	ОтветСтрокойДляОбработки = СтрЗаменить(ОтветСтрокой,"@","");
	Чтение.УстановитьСтроку(ОтветСтрокойДляОбработки);
	Результат = ПрочитатьJSON(Чтение);
13. user1782484 18.05.22 12:51 Сейчас в теме
(12)
Чтение = Новый ЧтениеJSON;
ОтветСтрокой = Ответ.ПолучитьТелоКакСтроку();
ОтветСтрокойДляОбработки = СтрЗаменить(ОтветСтрокой,"@","");
Чтение.УстановитьСтроку(ОтветСтрокойДляОбработки);
Результат = ПрочитатьJSON(Чтение);

Не помогает
Оставьте свое сообщение

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