Страницы: 1 2 След.
RSS
Есть ли какие-нибудь инструменты для работы с JSON d Excel?
 
Есть ли какие-нибудь инструменты для работы с JSON d Excel?
 
Поиск -->  json в vba #5  
Изменено: JeyCi - 28.09.2015 10:45:19
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Для работы в VBA использую найденный на просторах класс Jsonbad.
Пример использования присутствует.
Если у вас офис 64,то надо править класс
Изменено: Doober - 28.09.2015 12:24:41
 
А куда все это подкладывать?
 
Под квочку :D
Добавите в проект vba модуль JsonBag.cls и будет вам счастье.
Откройте блокнотом файл Форма , посмотрите реализацию по чтению,формированию json.
Будет трудно.Почитайте в инете что такое Json и с чем его едят.
 
Закопировал в модуль, там столько красного, жесть просто(((
 
Красного нет.Пример для авторизации
Код
Function Generate_Login() As String
    With New JsonBag
        .IsArray = False
        ![UserName] = "demo"
        ![Password] = "demo"
       Generate_Login = .JSON
    End With
End Function

Кратенькое видео в формате ехе как надо использовать ресурсы инета.
Изменено: Doober - 28.09.2015 14:09:31
 
Цитата
Doober написал: Кратенькое видео в формате ехе как надо использовать ресурсы инета.
Ммм... чую подвох я в этой штуке
 
Волков бояться — в лес не ходить
 
А я использую конвертацию JSON в XML (на просторах инета нашел модуль парсинга JSON в объект, состоящий из коллекций и словарей, и добавил туда конвертацию в XML)
А из XML уже делаю выборку нужных мне данных (через объектную модель - командами типа SelectNodes)


PS: Может, кто подскажет, что это за синтаксис такой, с восклицательными знаками?
(по примеру от Doober)

Код
Function Generate_Login() As String
    With New JsonBag
        .IsArray = False
        ![UserName] = "demo"
        ![Password] = "demo"
       Generate_Login = .JSON
    End With
End Function

Код
 With JB
        .Clear
        ![First] = 1
        ![Second] = Null
        With .AddNewArray("Third")


это как-то касается NewEnum?
Цитата
NewEnum() As IUnknown [hidden iterator]
Used to iterate over the names of the list items in an "Object" type JsonBag.
Изменено: Игорь - 28.09.2015 19:44:07
 
Николай Бородин, на этом форуме встречал такую тему, судя по отзывам неплохая библиотека,
но я в ней не разобрался, к тому же все (два) решения которые я встречал написаны под 32-розрядный офис .

Второе найденое решение.  
 
Доброе время суток
Цитата
Игорь написал:
PS: Может, кто подскажет, что это за синтаксис такой, с восклицательными знаками?
Это обращение к свойству по умолчанию с учётом того, что у свойства есть параметр (если значение параметра без пробелов, то можно опустить и символы [] вокруг него).(Интересно бы было знать - как в таком ключе использовать, если параметров у свойства больше одного)?
Код
'Default property.
Public Property Get Item(ByVal Key As Variant) As Variant
Attribute Item.VB_UserMemId = 0


Цитата
Игорь написал:
NewEnum() As IUnknown [hidden iterator]
Used to iterate over the names of the list items in an "Object" type JsonBag.
А это похоже настройка итератора, чтобы можно было использовать For Each
 
Андрей, большое спасибо за ответ.
Теперь понял, что это такое
 
Цитата
Андрей VG написал: Интересно бы было знать - как в таком ключе использовать, если параметров у свойства больше одного)?
я не совсем могу представить - это как?..
но если вопрос о ситуации, например key2 (в JsonString ниже) - то вот такой ответ нашла когда-то (есть линк в #2 или прямой линк)... т.е. если у свойства есть несколько параметров, то они в рамках общего свойства тоже имеют свои свойства-идентифицирующие их... мне кажется, такова структура json - и никак иначе... имхо... и тогда просто в рамках свойства выделяется объект, состоящий из нескольких параметров и их свойств... я это однозначно видела  :) , когда адаптировала тот код (из примера1 с использованием ScriptControl - на stackoverflow) и не поставила set value=...
Код
    JsonString = "{""key1"": ""val1"", ""key2"": { ""key3"": ""val3"" } }"
    Set JsonObject = DecodeJsonString(CStr(JsonString))
    Keys = GetKeys(JsonObject)
    Value = GetProperty(JsonObject, "key1")   'свойство-значение
    Set Value = GetObjectProperty(JsonObject, "key2")   'свойство-объект
P.S. как в др кодах-обработки json - не знаю...
Изменено: JeyCi - 29.09.2015 09:10:50
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
Игорь написал: Андрей, большое спасибо за ответ.
Да не за что. Когда то кодил на VB6, там это всё явно выставлялось...
Цитата
JeyCi написал: я не совсем могу представить - это как?
Давайте по порядку.
Если вы создадите свой класс Class1, определите в нём свойство, допустим
Код
Public Property Get Item(ByVal Index As Long) As String
    '...
End Property
Public Property Let Item(ByVal Index As Long, ByVal Value As String)
    '...
End Property

Сохраните этот класс в файл и допишите в нём атрибут свойства по-умолчанию
Код
Public Property Get Item(ByVal Index As Long) As String
Attribute Item.VB_UserMemId = 0
    '...

То вы получите возможность обращаться к этому свойству в такой манере
Код
Dim p As New Class1
p(1) = "text"
'что эквивалентно
p.Item(1) = "text"
'или
p![1] = "text" '"хитрый" способ обращения к свойству с одним параметром

Но, допустим мы определили свойство с двумя параметрами
Код
Public Property Get Item(ByVal Xid As Long, ByVal Yid As Long) As String
    '...
End Property
Public Property Let Item(ByVal Xid As Long, ByVal Yid As Long, ByVal Value As String)
    '...
End Property

И указали его как свойство по умолчанию, варианты
Код
Dim p As New Class1
p(1, 1) = "text"
'или
p.Item(1, 1) = "text"

понятны, а как будет выглядеть это же в "хитрой" нотации с ![]
Изменено: Андрей VG - 30.09.2015 00:53:38
 
Цитата
Андрей VG написал: а как будет выглядеть это же в "хитрой" нотации с ![]
вот, теперь я поняла вопрос...
но пока я не делала ещё даже такого  
Цитата
Андрей VG написал: Сохраните этот класс в файл и допишите в нём атрибут свойства по-умолчанию
... и более "хитрых" вариантов тем более не видела... поэтому мой ответ оказался о другом...
спасибо за ликбез - теперь лучше буду читать коды...  8)
p.s. #14 тогда пусть послужит напоминанием тем, кто будет делать через подключение библиотеки ScriptControl
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Vitallic,Скачал второй вариант, но запустить его в работу не могу. Там в коде есть такая тема, как создание объекта Dictionary, но его описания я нигде не нашел. Я так понимаю он должен быть в классах описан?
 
Николай Бородин, нажмите Tools - References, и поставьте галочку напротив Microsoft Scripting Runtime
 
 
Николай Бородин, подключите Microsoft ActiveX Data Objects x.x Library
https://msdn.microsoft.com/ru-ru/library/ms677497(v=vs.85).aspx
 
Чувствую прям немного осталось
 
В общем что то я не пойму какие процедуры и функции мне нужно применять для преобразования строки json в объект! Ткните пальцем пожалуйста
 
Николай Бородин, "Справка" не пробовали нажать? Как объявлены JSONTEXT, parse?
 
Где эта справка?
 
Николай Бородин,
 
Обычно, чтобы не гадать на какой системе будет работать макрос, по такому принципу делают
Код
#If VBA7 And Win64 Then
Declare PtrSafe Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
#Else
Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
#End If
Арфы - нет, возьмите бубен.
 
Помогите решить задачу. Необходимо в VBA сделать пользовательскую функцию, чтобы с помощью формул вытаскивать из JSON нужные теги...
Напр.
Код
=Фильтр.JSON(ВЕБСЛУЖБА("https://query1.finance.yahoo.com/v10/finance/quoteSummary/pbf?modules=price"), longName)
Результат: PBF Energy Inc.

В параметрах функции задаем источник JSON и Xpath (тег) который нужно извлечь.

В инете самое близкое нашел вот это (https://medium.com/swlh/excel-vba-parse-json-easily-c2213f4d8e7a), но там не для вставки в формулы. Я подозреваю, что можно как-то этот код с работой в формулах связать, но мозгов не хватает...
Изменено: sv_ispu - 03.01.2021 15:44:50
 
тупо в лоб.
 
Александр Моторин, вот спасибо, добрый человек! я сток промучался, а тут неск минут делов.... Для моей задачи пока хватит..Еще б разобраться с массивами, но это попозже напишу....
 
Вариант на Power Query
Цитата
sv_ispu написал:
и Xpath (тег) который нужно извлечь.
Откуда информация, что в JSON есть теги и каким-то боком можно использовать XPath?
Страницы: 1 2 След.
Наверх