|
формат JSON в версии 8.3.7 | ☑ | ||
---|---|---|---|---|
0
Zakella86
03.03.16
✎
12:17
|
добрый день.
Хотел попросить помощь у опытных спецов, кои я уверен являются форумчане. В версии 8.3 появился такой формат как JSON. Мне интересно есть ли какой нибудь стандартный парсер для json формата. Ну к примеру что бы результат запроса автоматически в JSON формат, или же придется как и в xml все ручками писать. Ну к примеру в javascript есть автоматический парсер из json в многомерный массив и наоборот. Есть ли стандартные средства в 8.3? |
|||
1
Encode
03.03.16
✎
12:24
|
(0) Сериализуемые объекты 1С можно автоматом сериализовать в JSON через СериализаторXDTO
|
|||
2
Zakella86
03.03.16
✎
12:29
|
ок , можно пример?
вот простенький запрос, результат выводится в тз. Можно ли сразу тз в json формат перевести? Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка, | Номенклатура.Родитель, | Номенклатура.ЭтоГруппа, | Номенклатура.Код, | Номенклатура.Наименование, | Номенклатура.Сумма, | Номенклатура.ВидНоменклатуры, | Номенклатура.Цена |ИЗ | Справочник.Номенклатура КАК Номенклатура"; РезультатЗапроса = Запрос.Выполнить().Выгрузить(); |
|||
3
Живой Ископаемый
03.03.16
✎
12:30
|
В таблицу значений и уже потом ее в JSON. результат запроса не сериализуется
|
|||
4
Живой Ископаемый
03.03.16
✎
12:30
|
а, сорри, ща
|
|||
5
Encode
03.03.16
✎
12:38
|
(2) Как то так
ЗаписьJSON = Новый ЗаписьJSON; ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON( ,Символы.Таб); ЗаписьJSON.ОткрытьФайл("ИмяФайла",,,ПараметрыЗаписиJSON); СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, Результат); ЗаписьJSON.Закрыть(); |
|||
6
Zakella86
03.03.16
✎
12:45
|
{HTTPСервис.users.Модуль(84)}: Метод объекта не обнаружен (ЗаписатьJSON)
нет у СериализаторXDTO метода ЗаписьJSON |
|||
7
Encode
03.03.16
✎
12:47
|
(6) платформа какая?
|
|||
8
Zakella86
03.03.16
✎
12:48
|
8.3.6.2390
нужно обновится до 8.3.7? |
|||
9
Encode
03.03.16
✎
12:50
|
(8) 8.3.7.1759 и выше
|
|||
10
bazvan
03.03.16
✎
12:50
|
||||
11
Zakella86
03.03.16
✎
12:51
|
ок сейчас обновлю попробую
|
|||
12
Живой Ископаемый
03.03.16
✎
12:52
|
а еще просвятите - 8.3.8 - это ведь 8.3.7+, или 8.3.6+, минуя фишечки 8.3.7?
|
|||
13
bazvan
03.03.16
✎
12:54
|
(12) 8.3.8 тоже мертво рожденая,8.3.9 (и уже моячит 8.3.10)
|
|||
14
Живой Ископаемый
03.03.16
✎
12:57
|
так, то есть качать все-таки 8.3.7... ок
|
|||
15
bazvan
03.03.16
✎
12:59
|
(14) Да не я вот впродакш 8.3.8 не пускал, но работаю (конфы обновляю, конфигурю) и кое где действительно шустро работает
|
|||
16
Живой Ископаемый
03.03.16
✎
13:01
|
а JSON в ней и вот это все?
|
|||
17
Карупян
03.03.16
✎
13:01
|
(12) 8.3 по порядку развивается, а вот 8.4 уже совсем другая история.
Но там пока альфа |
|||
18
Живой Ископаемый
03.03.16
✎
13:02
|
2(17) а, все, сенкс... 8.4, точно...
|
|||
19
Zakella86
03.03.16
✎
13:08
|
обновил
пробую зайти на hhtp сервис вот что пишет 1C:Enterprise 8 application error: Ошибка при разборе дескриптора виртуальных ресурсов by reason: Ошибка преобразования данных XDTO: НачалоСвойства: protocol Форма: Атрибут Тип: {http://www.w3.org/2001/XMLSchema}anySimpleT |
|||
20
elCust
03.03.16
✎
13:08
|
(0) А для каких целей вы используете JSON? У вас стороннее приложение на вход принимает JSON от 1С?
Или используйте - ЗначениеВФайл(); |
|||
21
Zakella86
03.03.16
✎
13:10
|
да, есть веб интерфейс написанный на webix, должен принимать данные в формате json
|
|||
22
zva
03.03.16
✎
13:15
|
(21) Тогда нужно использовать обычную функцию ЗаписатьJson() без всяких серилизаторов
В формате JSON допускается записывать только значения следующих типов: Строка, Число, Булево, Дата (преобразованная в строку), Массив, ФиксированныйМассив, Структура, ФиксированнаяСтруктура, Соответствие, ФиксированноеСоответствие. |
|||
23
Zakella86
03.03.16
✎
13:15
|
а что за строчка ?
ЗаписьJSON.ОткрытьФайл("ИмяФайла",,,ПараметрыЗаписиJSON); я же не со стороннего файла считываю json а с Тз |
|||
24
Zakella86
03.03.16
✎
13:20
|
в общем для ясности цель такая
выгружать результаты запросов (естественно в ТЗ) через post запрос ,так что бы не приходилось парсить каждый запрос, а просто выгрузить его и передать стандартными средствами в формате json |
|||
25
zva
03.03.16
✎
13:29
|
(24) Ты это ТЗ с сервера 1С на клиент передать не можешь, при этом хочешь чтоб сторонний сервис их понимал. ТЗ не сериализуется - передавай массив структур в Json.
|
|||
26
Живой Ископаемый
03.03.16
✎
13:31
|
+(24) Да, заведи себе процедурку в общем серверном модуле, которая будет из ТЗ делать массив структур. То есть запросы выгружаешь в ТЗ, ТЗ - в массив структур и уже последний сериализуешь в джейсон.
2(25) Ну, в объет ХДТО ТЗ все-таки серализуется |
|||
27
Zakella86
03.03.16
✎
13:32
|
так цель в том что бы стандартными средствами перевести тз в json и далее передать данные по hhtp запросу.
вот что я написал Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка, | Номенклатура.Родитель, | Номенклатура.ЭтоГруппа, | Номенклатура.Код, | Номенклатура.Наименование, | Номенклатура.Сумма, | Номенклатура.ВидНоменклатуры, | Номенклатура.Цена |ИЗ | Справочник.Номенклатура КАК Номенклатура"; РезультатЗапроса = Запрос.Выполнить().Выгрузить(); ЗаписьJSON = Новый ЗаписьJSON; ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON( ,Символы.Таб); ЗаписьJSON.ОткрытьФайл("ИмяФайла",,,ПараметрыЗаписиJSON); СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, РезультатЗапроса); ЗаписьJSON.Закрыть(); выдает ошибку ЗаписьJSON.ОткрытьФайл("ИмяФайла",,,ПараметрыЗаписиJSON); по причине: Ошибка доступа к файлу 'ИмяФайла' |
|||
28
Живой Ископаемый
03.03.16
✎
13:37
|
2(27) Чувак, тебе в (22) посте все буквы видны?
|
|||
29
Zakella86
03.03.16
✎
13:39
|
да, но выходит тз нельзя записать в json?
|
|||
30
Живой Ископаемый
03.03.16
✎
13:42
|
2(29) а в (26)-м посте какие буквы не видны?
|
|||
31
Zakella86
03.03.16
✎
13:44
|
ок, буду передавать массив, тз отпадает
другой вопрос, выдает ошибку {Форма.Форма.Форма(24)}: Ошибка при вызове метода контекста (ОткрытьФайл) ЗаписьJSON.ОткрытьФайл("ИмяФайла",,,ПараметрыЗаписиJSON); по причине: Ошибка доступа к файлу 'ИмяФайла' |
|||
32
Живой Ископаемый
03.03.16
✎
13:45
|
воот... погоди пока...
|
|||
33
arsik
гуру
03.03.16
✎
13:45
|
(30) Да с ним бесполезно. Он даже название протокола (hhtp) нормально написать не может.
|
|||
34
Zakella86
03.03.16
✎
13:49
|
arsik во первых я пишу быстро, а во вторых не старайся зайти за умного. Я поднял интересный вопрос на который мало инфомации в интернете.Хочешь показаться крутым программером, напиши по делу а потом макай в какашки
|
|||
35
arsik
гуру
03.03.16
✎
13:53
|
(34) "интересный вопрос на который мало инфомации в интернете"
Это вдвойне смешнее. http://bfy.tw/4Yum |
|||
36
Zakella86
03.03.16
✎
13:55
|
я тебе сокращю время
http://v8.1c.ru/o7/201501json/index.htm изыди в общем.Не понимаю к чему эти понты? Не хочешь помочь пройди мимо |
|||
37
Zakella86
03.03.16
✎
14:00
|
Американский форум. Задаёшь вопрос, потом тебе отвечают.
Израильский форум. Задаёшь вопрос, потом тебе задают вопрос. Русский форум. Задаёшь вопрос, потом тебе долго рассказывают, какой ты дурак. |
|||
38
arsik
гуру
03.03.16
✎
14:05
|
(37) Тебе выше уже все объяснили. Если бы внимательно смотрел в свой код, давно бы уже ошибку нашел.
|
|||
40
Живой Ископаемый
03.03.16
✎
14:07
|
ой.. простите...
|
|||
41
Zakella86
03.03.16
✎
14:08
|
arsik я уже понял что тз нельзя передавать в json.У меня сейчас другая ошибка
|
|||
42
Zakella86
03.03.16
✎
14:09
|
в общем переделал так
&НаСервере Процедура ПеревестивВJsonНаСервере() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка, | Номенклатура.Родитель, | Номенклатура.ЭтоГруппа, | Номенклатура.Код, | Номенклатура.Наименование, | Номенклатура.Сумма, | Номенклатура.ВидНоменклатуры, | Номенклатура.Цена |ИЗ | Справочник.Номенклатура КАК Номенклатура"; РезультатЗапроса = Запрос.Выполнить().Выгрузить(); мРезЗапроса=ТабЗначВМассив(РезультатЗапроса); ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.ОткрытьФайл("ИмяФайла",,,Новый ПараметрыЗаписиJSON( ,Символы.Таб)); ЗаписатьJSON(ЗаписьJSON, мРезЗапроса); ЗаписьJSON.Закрыть(); КонецПроцедуры &НаКлиенте Процедура ПеревестивВJson(Команда) ПеревестивВJsonНаСервере(); КонецПроцедуры Функция ТабЗначВМассив(ТаблицаЗначений) Экспорт НашМассив = Новый Массив; Для Каждого СтрокаТаблицы из ТаблицаЗначений Цикл НашаСтруктура = Новый Структура; Счетчик = 0; Для Каждого СтрокаСтруктуры из СтрокаТаблицы Цикл Если НЕ ТипЗнч(СтрокаСтруктуры) = Тип(ТаблицаЗначений) тогда НашаСтруктура.Вставить(ТаблицаЗначений.Колонки[Счетчик].Имя,СтрокаТаблицы[Счетчик]); Иначе НашаСтруктура.Вставить(ТаблицаЗначений.Колонки[Счетчик].Имя,ТабЗначВМассив(СтрокаСтруктуры)); КонецЕсли; Счетчик = Счетчик + 1; КонецЦикла; НашМассив.Добавить(НашаСтруктура); КонецЦикла; Возврат(НашМассив); КонецФункции но выдает ту же ошибку {Форма.Форма.Форма(24)}: Ошибка при вызове метода контекста (ОткрытьФайл) ЗаписьJSON.ОткрытьФайл("ИмяФайла",,,Новый ПараметрыЗаписиJSON( ,Символы.Таб)); по причине: Ошибка доступа к файлу 'ИмяФайла' |
|||
43
zva
03.03.16
✎
14:09
|
ЗаписьJSON = Новый ЗаписьJSON();
ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON, СтруктураДанных); Json = ЗаписьJSON.Закрыть(); |
|||
44
arsik
гуру
03.03.16
✎
14:10
|
(41) ищи. Я ошибку вижу. :)
|
|||
45
Живой Ископаемый
03.03.16
✎
14:11
|
2(42) ну неужели непонятно, что нет такого файла? Или ты надеешься на то, что примерный код данный тебе на форуме, заработает после копипасты?
|
|||
46
Zakella86
03.03.16
✎
14:15
|
Живой Ископаемый получается мне нужно создать какой то промежуточный файл что бы сначала туда записался json ?
|
|||
47
Zakella86
03.03.16
✎
14:16
|
zva пишет
Передано значение недопустимого типа хотя передал массив в второй параметр |
|||
48
Живой Ископаемый
03.03.16
✎
14:16
|
2(46) то есть (44) не станешь пробовать потому что очень просто?
я просто не успеваю прямо сейчас тебе помочь... |
|||
49
Живой Ископаемый
03.03.16
✎
14:17
|
2(47) попробуй сначала на массиве, в котором будет будет строка и число например...
|
|||
50
Zakella86
03.03.16
✎
14:19
|
Живой Ископаемый спасибо тебе, я понял. Вот нахера такие сложности делать, мне нафиг не нужен промежуточный файл. Нужен запрос -ответ. А получается что то вроде лога. Нафига
|
|||
51
Zakella86
03.03.16
✎
14:22
|
к сожалению 1с все таки громоздкий язык, при всех его преимущетствах жутко громоздкий синтаксис с кучей не нужных конструкций.
|
|||
52
Живой Ископаемый
03.03.16
✎
14:24
|
Ты так думаешь, потому что на Objective-C не писал... или даже не читал
|
|||
53
Zakella86
03.03.16
✎
14:26
|
ну при всей противоречивости жабыскрипта, хотя бы не чешешь левой рукой правое ухо
|
|||
54
zva
03.03.16
✎
14:27
|
(50) "мне нафиг не нужен промежуточный файл. Нужен запрос -ответ. А получается что то вроде лога. Нафига"
Получается ровно то, что написал... Не нужен промежуточный файл - не используй... ЗаписьJSON = Новый ЗаписьJSON(); ЗаписьJSON.УстановитьСтроку(); СтруктураДанных = Новый Структура("Строка, Дата", "АДПДпжпсжоывсм", ТекущаяДата()); ЗаписатьJSON(ЗаписьJSON, СтруктураДанных); Json = ЗаписьJSON.Закрыть(); |
|||
55
Zakella86
03.03.16
✎
14:29
|
zva спасибо, то что нужно
вообще спасибо всем кто помогает |
|||
56
luter-89
03.03.16
✎
14:30
|
Есть метод ПрочитатьJSON(), и не нужно читать в цикле. Про запись не в курсе, вроде нет такого
|
|||
57
Живой Ископаемый
03.03.16
✎
14:36
|
2(53) тут тоже не чешешь. в 1C наоборот все strightforward.
Разве что в новых типовых и БСП уже есть какие-то более сложные паттерны |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |