|
вопрос по Json | ☑ | ||
---|---|---|---|---|
0
Ybr
07.08.20
✎
09:32
|
Коллеги добрый день !
Как получить Значения ранее с Json не работал .что я упустил? &НаСервере Процедура Команда1НаСервере() ИНН="....."; HTTPСоединение=Новый HTTPСоединение("suggestions.dadata.ru",,,,,,Новый ЗащищенноеСоединениеOpenSSL); Заголовки=Новый Соответствие(); Заголовки.Вставить("Content-Type","application/json"); Заголовки.Вставить("Accept","application/json"); Заголовки.Вставить("Authorization","Token ....."); HTTPЗапрос=Новый HTTPЗапрос("/suggestions/api/4_1/rs/suggest/party",Заголовки); HTTPЗапрос.УстановитьТелоИзСтроки("{ ""query"": "" " + ИНН + """, ""status"": ""ACTIVE"", ""type"": ""INDIVIDUAL"" }"); HTTPОтвет=HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); ОтветDaData = HTTPОтвет.ПолучитьТелоКакСтроку(); Если HTTPОтвет.КодСостояния=200 Тогда тЧтение = Новый ЧтениеJSON; тЧтение.УстановитьСтроку(ОтветDaData); Пока тЧтение.Прочитать() Цикл Сообщить("Тип текущего элемента " + тЧтение.ТипТекущегоЗначения); Если тЧтение.ТипТекущегоЗначения = ТипЗначенияJSON.ИмяСвойства Тогда Сообщить("Имя = " + тЧтение.ТекущееЗначение); КонецЕсли; Если тЧтение.ТипТекущегоЗначения = ТипЗначенияJSON.Булево ИЛИ тЧтение.ТипТекущегоЗначения = ТипЗначенияJSON.Строка ИЛИ тЧтение.ТипТекущегоЗначения = ТипЗначенияJSON.Число ИЛИ тЧтение.ТипТекущегоЗначения = ТипЗначенияJSON.Комментарий Тогда Сообщить("Значение = " + тЧтение.ТекущееЗначение); КонецЕсли; КонецЦикла; тЧтение.Закрыть(); КонецЕслИ; КонецПроцедуры &НаСервере Функция СформироватьСтрокуJSON(СтруктураЗапроса) СтрокаJSON = "{"; Для каждого Элемент Из СтруктураЗапроса Цикл СтрокаJSON = СтрокаJSON + """" + Элемент.Ключ + """" + ":"; Если ТипЗнч(Элемент.Значение) = Тип("Строка") Тогда СтрокаJSON = СтрокаJSON + """" + Элемент.Значение + """"; ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("Число") Тогда СтрокаJSON = СтрокаJSON + СтрЗаменить(Строка(Элемент.Значение), Символы.НПП, ""); Иначе СтрокаJSON = СтрокаJSON + """" + КодироватьСтроку(Строка(Элемент.Значение), СпособКодированияСтроки.КодировкаURL) + """"; КонецЕсли; СтрокаJSON = СтрокаJSON + ","; КонецЦикла; Если Прав(СтрокаJSON, 1) = "," Тогда СтрокаJSON = Лев(СтрокаJSON, СтрДлина(СтрокаJSON)-1); КонецЕсли; Возврат СтрокаJSON + "}"; КонецФункции &НаКлиенте Процедура Команда1(Команда) Команда1НаСервере(); КонецПроцедуры |
|||
1
ДенисЧ
07.08.20
✎
09:34
|
А зачем его руками собирать/разбирать? Есть же готовые процедуры...
|
|||
2
polosov
07.08.20
✎
09:36
|
(0) Ты хоть гуглил перед реализацией своего монстра?
|
|||
3
bootini
07.08.20
✎
09:37
|
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.ОткрытьПоток(HTTPОтвет.ПолучитьТелоКакПоток()); Попытка СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON, Ложь); Исключение КонецПопытки; |
|||
4
Ybr
07.08.20
✎
09:40
|
(3) я первый раз пишу .откуда мне знать .что не так
|
|||
5
Ybr
07.08.20
✎
09:41
|
(1) выборочно надо значения получить
|
|||
6
ДенисЧ
07.08.20
✎
09:47
|
(5) Прочитай в соответствие, оттуда и получай данные
|
|||
7
Сияющий в темноте
07.08.20
✎
09:49
|
выборочно без прочитать?
можно найти в файле ключ и прочитать значение после него,но это костыльный подход. если структура ответа сложная,то можно получить совсем не то,что записано. |
|||
8
Ybr
07.08.20
✎
09:50
|
(6) Спасибо за подсказку
|
|||
9
bootini
07.08.20
✎
09:50
|
(5)
Если СтруктураОтвета.Свойство("ВыборочноНадоЗначения") Тогда ВыборочноНадоЗначения = СтруктураОтвета["ВыборочноНадоЗначения"]; КонецЕсли; |
|||
10
Ybr
07.08.20
✎
09:51
|
(9) все понял . тема закрыта .всем вери сеньк ю
|
|||
11
Ybr
09.08.20
✎
14:46
|
(6) как данные получить ?
|
|||
12
Ybr
09.08.20
✎
14:48
|
Прочитал я в соответствие .что дальше ? как значение вытащить?
Если HTTPОтвет.КодСостояния=200 Тогда Кодировка = "utf-8"; Поток = HTTPОтвет.ПолучитьТелоКакСтроку(Кодировка) ; // ну допустим мы знаем что там такая кодировка ЧтениеJSON = Новый ЧтениеJSON(); ЧтениеJSON.ОткрытьПоток(HTTPОтвет.ПолучитьТелоКакПоток()); Попытка СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON, Истина); Исключение КонецПопытки; КонецЕслИ; |
|||
13
acht
09.08.20
✎
14:52
|
(12) А чем помощь форума от курсов отличается, Андрей Николаевич?
|
|||
14
Ybr
09.08.20
✎
14:53
|
(13) на курсах нет полной картины . даже подавно
|
|||
15
Ybr
09.08.20
✎
14:54
|
(13) а здесь такие знатоки сидят вроде вас
|
|||
16
Salimbek
09.08.20
✎
14:54
|
(12) А что вас в (9) не устроило?
|
|||
17
Ybr
09.08.20
✎
14:56
|
(16) какое там будет свойство?
|
|||
18
Ybr
09.08.20
✎
15:00
|
(13) нет не напишу . потому.что не вашего это ума дело
|
|||
19
Ybr
09.08.20
✎
15:05
|
Кто подскажет .что с соответствием делать дальше?
СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON, Истина); |
|||
20
acht
09.08.20
✎
15:13
|
Так вот же, Андрей Николаевич, вы же сами вчера у себя вконтактике все и написали https://vk.com/id590088932?w=wall590088932_97
Вроде даже код рабочий. |
|||
21
Ybr
09.08.20
✎
15:15
|
Забанить противоречит правилам форума acht
|
|||
22
Ybr
09.08.20
✎
15:19
|
(20) не весь рабочий . нужно допиливать
|
|||
23
Ybr
09.08.20
✎
15:29
|
(20) Пидорас
|
|||
24
ДенисЧ
09.08.20
✎
15:50
|
(19) Значение = СтруктураОтвета.Получить(ИмяСвойства)
|
|||
25
МихаилМ
09.08.20
✎
16:01
|
(20) я думал юму лет 20 максимум. в 42 года с интеллектом подростка - беда.
|
|||
26
Ybr
09.08.20
✎
16:04
|
(25) ты себя видел? посмотри в зеркало
|
|||
27
Ybr
09.08.20
✎
16:30
|
(24) ИмяСвойства что такое ?
|
|||
28
ДенисЧ
09.08.20
✎
16:36
|
(27) Имя свойства, которое тебе нужно получить...
Я же не знаю структуры твоего файла и данных, которые тебе нужно получить |
|||
29
Ybr
09.08.20
✎
16:43
|
(28) я ж с сайта получаю
|
|||
30
Ybr
09.08.20
✎
16:44
|
Название Описание
Базовые поля, заполняются для всех тарифов value Наименование компании unrestricted_value = value data.inn ИНН data.kpp КПП data.ogrn ОГРН data.ogrn_date Дата выдачи ОГРН data.hid Уникальный идентификатор в Дадате data.type Тип организации LEGAL — юридическое лицо INDIVIDUAL — индивидуальный предприниматель data.name Наименование └ full_with_opf — полное наименование └ short_with_opf — краткое наименование └ latin — не заполняется └ full — полное наименование без ОПФ └ short — краткое наименование без ОПФ |
|||
31
Ybr
09.08.20
✎
16:45
|
(28) почему имя свойства .метод же ключ если получить
|
|||
32
ДенисЧ
09.08.20
✎
16:47
|
(30) С дадаты качаешь? )))
У меня где-то код был... Счас посмотрю... |
|||
33
Ybr
09.08.20
✎
16:48
|
(32) буду рад спасибо
|
|||
34
ДенисЧ
09.08.20
✎
16:48
|
Функция ПолучитьДанныеПоИНН(инн) экспорт
соединение = Новый HTTPСоединение("suggestions.dadata.ru",,,,,,Новый ЗащищенноеСоединениеOpenSSL); Заголовки = Новый Соответствие; Заголовки.Вставить("Content-Type", "application/json"); Заголовки.Вставить("Accept", "application/json"); Заголовки.Вставить("Authorization", "Token 96217b3aed2bf59cd9d9f9966fbd24d186541c9c"); // токен из личного кабинета dadata.ru запрос = Новый HTTPЗапрос("/suggestions/api/4_1/rs/findById/party", Заголовки); текстЗапроса = "{""query"": """ + инн + """}"; запрос.УстановитьТелоИзСтроки(текстЗапроса); рез = соединение.ОтправитьДляОбработки(запрос); Если рез.КодСостояния <> 200 Тогда Возврат Неопределено; КонецЕсли; ответ = рез.ПолучитьТелоКакСтроку(); чт = Новый ЧтениеJSON; чт.УстановитьСтроку(ответ); рез = ПрочитатьJSON(чт, Истина); Возврат рез; КонецФункции Если ПустаяСтрока(ИНН) Тогда Сообщить("Не указан ИНН"); Возврат; КонецЕсли; данные = Справочники.Контрагенты.ПолучитьДанныеПоИНН(ИНН); Если данные = Неопределено ИЛИ ТипЗнч(данные) <> Тип("Соответствие") тогда Сообщить("Не смогли получить данные по ИНН"); Возврат; КонецЕсли; массивОтветов = данные.Получить("suggestions"); Если ТипЗнч(массивОтветов) <> Тип("Массив") ИЛИ массивОтветов.Количество() = 0 Тогда Сообщить("Не смогли получить данные по ИНН"); Возврат; КонецЕсли; таблицаОтветов = Новый ТаблицаЗначений; таблицаОтветов.Колонки.Добавить("Наименование"); таблицаОтветов.Колонки.Добавить("Ответ"); Для Каждого ответ из массивОтветов Цикл стр = таблицаОтветов.Добавить(); стр.Наименование = ответ.Получить("value"); стр.ответ = ответ.Получить("data"); КонецЦикла; Если таблицаОтветов.Количество() > 1 Тогда стр = таблицаОтветов.ВыбратьСтроку("Выберите вариант"); Если стр = Неопределено Тогда Возврат; КонецЕсли; ИНаче стр = таблицаОтветов[0]; КонецЕсли; Наименование = стр.ответ.Получить("name").Получить("short"); НаименованиеПолное = стр.ответ.Получить("name").Получить("full_with_opf"); КПП = стр.ответ.Получить("kpp"); РасписаниеРаботыСтрокой = стр.ответ.Получить("ogrn"); Если СокрЛП(стр.ответ.Получить("type")) = "LEGAL" Тогда ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо; ИначеЕсли СокрЛП(стр.ответ.Получить("type")) = "INDIVIDUAL" Тогда ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо; КонецЕсли; Ну и так далее. Это всё вызывалось из формы справочника контрагентов. Сам подпили под себя. |
|||
35
ДенисЧ
09.08.20
✎
16:49
|
Токен только свой подставь. Мне мой не жалко, он бесплатный.
|
|||
36
Ybr
09.08.20
✎
16:53
|
(35) Дай Бог тебе все.что пожелаешь добрый человек
|
|||
37
ДенисЧ
09.08.20
✎
16:55
|
(36) Бога нет...
|
|||
38
Ybr
09.08.20
✎
16:58
|
(37) есть
|
|||
39
acht
09.08.20
✎
18:00
|
(37) А пожелай, пожалуйста, Рогачеву знаний и ума. Проверим, как оно работает и что дает.
|
|||
40
Ybr
09.08.20
✎
18:42
|
(39) ты тролль обыкновенный
|
|||
41
Ybr
09.08.20
✎
18:43
|
вот так я переделал код . ДенисТч
половина в нем не работало &НаСервере Процедура Команда1НаСервере( ) Данные= ПолучитьДанныеПоИНН(инн) ; массивОтветов = данные.Получить("suggestions"); таблицаОтветов = Новый ТаблицаЗначений; таблицаОтветов.Колонки.Добавить("Наименование"); таблицаОтветов.Колонки.Добавить("Ответ"); Для Каждого ответ из массивОтветов Цикл стр = таблицаОтветов.Добавить(); стр.Наименование = ответ.Получить("value"); Сообщить(стр.Наименование); КонецЦикла; КонецПроцедуры Функция ПолучитьДанныеПоИНН(инн) экспорт соединение = Новый HTTPСоединение("suggestions.dadata.ru",,,,,,Новый ЗащищенноеСоединениеOpenSSL); Заголовки = Новый Соответствие; Заголовки.Вставить("Content-Type", "application/json"); Заголовки.Вставить("Accept", "application/json"); //Заголовки.Вставить("Authorization", "Token 96217b3aed2bf59cd9d9f9966fbd24d186541c9c"); // токен из личного кабинета dadata.ru Заголовки.Вставить("Authorization","Token 893634d15567d4a476f40613c5d59175b6467ef0"); запрос = Новый HTTPЗапрос("/suggestions/api/4_1/rs/findById/party", Заголовки); текстЗапроса = "{""query"": """ + ИНН + """}"; запрос.УстановитьТелоИзСтроки(текстЗапроса); рез = соединение.ОтправитьДляОбработки(запрос); Если рез.КодСостояния <> 200 Тогда Возврат Неопределено; КонецЕсли; ответ = рез.ПолучитьТелоКакСтроку(); чт = Новый ЧтениеJSON; чт.УстановитьСтроку(ответ); рез = ПрочитатьJSON(чт, Истина); Возврат рез; КонецФункции &НаКлиенте Процедура Команда1(Команда) Команда1НаСервере( ); КонецПроцедуры |
|||
42
Ybr
09.08.20
✎
18:44
|
осталось мне вытянуть каким то образом огрн и вид деятельности
|
|||
43
Ybr
09.08.20
✎
18:45
|
(39) а тебе надо пожелать .чтобы ты мониаком не стал на старость лет . со своей слежкой за людьми за их вк . матерями и прочим..
|
|||
44
ДенисЧ
09.08.20
✎
19:32
|
(43) ОГРН = стр.ответ.Получить("ogrn");
Из моего кода. У меня код - в ОФ. У тебя в УФ. Надо же было подумать, прежде чем копипастить.... |
|||
45
Ybr
09.08.20
✎
19:39
|
(44) да работает . осталось поле получить
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |