powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Экспорт таблиц и запросов в JSON файл
11 сообщений из 11, страница 1 из 1
Экспорт таблиц и запросов в JSON файл
    #39887225
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем, не так давно написал один небольшой но весьма полезный класс , который позволяет сохранить в формате Json любую выбранную таблицу либо аксесовский "запрос". Сохраняется все одном файле JSON. В классической валидной спецификации. Таблиц и запросов в одном вызове может быть сколько угодно. Пользоваться очень просто и приятно. При нажатии на кнопку выполняется выгрузка данных из выбранных таблиц в один файл в формате JSON. Формат JSON классический. Вне зависимости от количества сохраняемых данных из таблиц в этом одном файле, распарсить назад можно любую . Проверяется очень просто без программирования (к примеру при распарсивании в Excel Power Query.)

Код вызова экспортера очень прост :

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Dim makeJson As New JsonExport 'создаем свой экземпляр класса
With makeJson
.setFilePathAndName "testJson", CurrentProject.Path & "\" 'вызываем метод, в который записываем как будет называться файл JSON и
' где он будет лежать. У меня он называется  -"testJson" и лежать будет там ,у меня- где сама база запускается - CurrentProject.Path & "\"  
.addTable ("t_cars") ' добавляет в обработку  таблицу t_cars
.addTable ("t_clients")  ' добавляет в обработку  таблицу t_clients
.addTable ("t_shops") ' добавляет в обработку  таблицу t_shops
' можно сколько угодно добавлять таблиц (от одной до бесконечности) , в данном случае я добавил три
.makeJsonFile ' метод запускает создание файла в формате JSON

End With
End Sub



В проекте на будущее - добавить выгрузку в XML. Это не сложно, но пока не нужно.
Рабочий пример приложил.
Если есть вопросы, с удовольствием отвечу.
...
Рейтинг: 0 / 0
Экспорт таблиц и запросов в JSON файл
    #39887279
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Экспорт таблиц и запросов в JSON файл
    #39887425
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург,

Ок, спс. Увлекся, не объявил часть переменных,.. предпродакшн так сказать
...
Рейтинг: 0 / 0
Экспорт таблиц и запросов в JSON файл
    #39887472
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов
Код: vbnet
1.
.setFilePathAndName "testJson", CurrentProject.Path & "\"


Я бы убрал проверку и, при необходимости, добавление слэша в метод объекта.

Сергей Лалов
можно сколько угодно добавлять таблиц (от одной до бесконечности)

А удалить?
А проверить наличие?
Да и обработка повторного добавления (вместо тупого повторного вывода) была бы кстати.

Также не нравится - отсутствие управления окавычиванием числовых значений (бывают случаи, когда оно необходимо), отсутствие управления делением на строки (хотя бы на уровне "запись на строку" - уж не говоря о полном pretty print).

Ну и не стал смотреть, как оно отнесётся к служебным символам в блобе.
...
Рейтинг: 0 / 0
Экспорт таблиц и запросов в JSON файл
    #39887478
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Сергей Лалов
Код: vbnet
1.
.setFilePathAndName "testJson", CurrentProject.Path & "\"


Я бы убрал проверку и, при необходимости, добавление слэша в метод объекта.

Сергей Лалов
можно сколько угодно добавлять таблиц (от одной до бесконечности)

А удалить?
А проверить наличие?
Да и обработка повторного добавления (вместо тупого повторного вывода) была бы кстати.

Также не нравится - отсутствие управления окавычиванием числовых значений (бывают случаи, когда оно необходимо), отсутствие управления делением на строки (хотя бы на уровне "запись на строку" - уж не говоря о полном pretty print).

Ну и не стал смотреть, как оно отнесётся к служебным символам в блобе.


Так слэш у меня отрабатывается в функции Encoding, немного не понял предложения.
Удаление могу сделать, только зачем, по замыслу вы просто добавляете таблицы , которые вам нужны в файле JSON. Можно конечно
из коллекции удалять , только нафиг нужно это ,не пойму.
Наличие проверяется, попробуйте вставить имя несуществующей таблицы или запроса и посмотреть ошибку.
Также проверяется таблица, если у нее 0 строк, вот кстати здесь наверное можно удалить и не добавлять в процедуру такую таблицу.
Окавычивание числовых значений могу сделать за секунду, но Хабр не рекомендует))
...
Рейтинг: 0 / 0
Экспорт таблиц и запросов в JSON файл
    #39887481
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina, а все, со слэшем понял, да, можно забацать.
...
Рейтинг: 0 / 0
Экспорт таблиц и запросов в JSON файл
    #39887487
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И последнее.

Согласно RFC 7159

https://tools.ietf.org/html/rfc7159#section-8.1 JSON text SHALL be encoded in UTF-8, UTF-16, or UTF-32 . The default encoding is UTF-8, and JSON texts that are encoded in UTF-8 are interoperable in the sense that they will be read successfully by the maximum number of implementations; there are many implementations that cannot successfully read texts in other encodings (such as UTF-16 and UTF-32).

Implementations MUST NOT add a byte order mark to the beginning of a JSON text. In the interests of interoperability, implementations that parse JSON texts MAY ignore the presence of a byte order mark rather than treating it as an error.

Так что результирующий файл - не соответствует...
...
Рейтинг: 0 / 0
Экспорт таблиц и запросов в JSON файл
    #39887490
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
И последнее.

Согласно RFC 7159

https://tools.ietf.org/html/rfc7159#section-8.1 JSON text SHALL be encoded in UTF-8, UTF-16, or UTF-32 . The default encoding is UTF-8, and JSON texts that are encoded in UTF-8 are interoperable in the sense that they will be read successfully by the maximum number of implementations; there are many implementations that cannot successfully read texts in other encodings (such as UTF-16 and UTF-32).

Implementations MUST NOT add a byte order mark to the beginning of a JSON text. In the interests of interoperability, implementations that parse JSON texts MAY ignore the presence of a byte order mark rather than treating it as an error.


Так что результирующий файл - не соответствует...

У меня на выходе в коллекциях строковые переменные, длинные, привести к нужному формату UTF-16 or UTF-32 тоже не проблема, оформлю дополнительным параметром в методе .setFilePathAndName . Где можно указать будет в какой кодировке пользователь хочет видеть файл и данные.

Ок, спасибо за предложения!
...
Рейтинг: 0 / 0
Экспорт таблиц и запросов в JSON файл
    #39887701
ИВП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов,
гуглить лень.
Объясните пенсу, где и для чего этот формат используется?
...
Рейтинг: 0 / 0
Экспорт таблиц и запросов в JSON файл
    #39887731
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИВП
Сергей Лалов,
гуглить лень.
Объясните пенсу, где и для чего этот формат используется?


UTF-8 имеет преимущество в том случае, когда символы ASCII представляют большинство символов в блоке текста, потому что UTF-8 кодирует все символы в 8 бит (например, ASCII). Это также выгодно тем, что файл UTF-8, содержащий только символы ASCII, имеет ту же кодировку, что и файл ASCII.

UTF-16 лучше, когда ASCII не преобладает, так как он использует 2 байта на символ, в первую очередь. UTF-8 начнет использовать 3 или более байтов для символов более высокого порядка, где UTF-16 остается всего на 2 байта для большинства символов.

UTF-32 все возможные символы в 4 байтах. Это делает его довольно раздутым. Я не знаю никакого преимущества, чтобы использовать его.

На самом деле Акина имеет в виду наверное, что в SQLевском BLOB желательно ужать посильней данные, чтобы бинарник поплотней был. ХЗ, честно, мой первоначальный вариант хранения JSON обычный Юникод , без выделения конкретного 8,16,32. Можно посмотреть в свойствах генерируемого файла JSON (он же txt) Я думаю проблемы как раз и начнуться, если я отдельно буду пользователю буду давать возможность выбора кодировки. Потому что помимо данных в файле, если парсить в базу сразу, с использованием SQL хрен знает в какой кодировке:
1) Поток
2) Сама база
3) Таблица


Так то функций преобразований полно, к примеру вот:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
Function SaveTextToFile(ByVal txt$, ByVal filename$, Optional ByVal encoding$ = "windows-1251") As Boolean
    ' функция сохраняет текст txt в кодировке Charset$ в файл filename$
    On Error Resume Next: Err.Clear
    Select Case encoding$
 
        Case "windows-1251", "", "ansi"
            Set FSO = CreateObject("scripting.filesystemobject")
            Set ts = FSO.CreateTextFile(filename, True)
            ts.Write txt: ts.Close
            Set ts = Nothing: Set FSO = Nothing
 
        Case "utf-16", "utf-16LE"
            Set FSO = CreateObject("scripting.filesystemobject")
            Set ts = FSO.CreateTextFile(filename, True, True)
            ts.Write txt: ts.Close
            Set ts = Nothing: Set FSO = Nothing
 
        Case "utf-8noBOM"
            With CreateObject("ADODB.Stream")
                .Type = 2: .Charset = "utf-8": .Open
                .WriteText txt$
 
                Set binaryStream = CreateObject("ADODB.Stream")
                binaryStream.Type = 1: binaryStream.Mode = 3: binaryStream.Open
                .Position = 3: .CopyTo binaryStream        'Skip BOM bytes
                .flush: .Close
                binaryStream.SaveToFile filename$, 2
                binaryStream.Close
            End With
 
        Case Else
            With CreateObject("ADODB.Stream")
                .Type = 2: .Charset = encoding$: .Open
                .WriteText txt$
                .SaveToFile filename$, 2        ' сохраняем файл в заданной кодировке
                .Close
            End With
    End Select
    SaveTextToFile = Err = 0: DoEvents



Мой первоначальный формат распарсили, и потестили уже во всех разрядных виндоуз и офисах. Ошибок нет, все норм.

На сервер напрямую не пробовал, MS SQL нет, но MySQL сейчас попробую, с блобом, до дома доберусь только.
...
Рейтинг: 0 / 0
Экспорт таблиц и запросов в JSON файл
    #39887761
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов
На самом деле Акина имеет в виду наверное
Нет, я имел в виду, что JSON обязан быть UTF без BOM. Ни 866, ни СР1251, ни что-то ещё - ТОЛЬКО UTF. Или есть все шансы, что он тупо не будет понят правильно.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Экспорт таблиц и запросов в JSON файл
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]