Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/22: Рейтинг темы: голосов - 22, средняя оценка - 4.82
18 / 17 / 2
Регистрация: 11.01.2013
Сообщений: 109

Строка JSON и Visual Basic - как их породнить?

24.03.2013, 15:13. Показов 4467. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В процессе написания программы для одного настольного приложения, возникла проблема при работе со строками формата JSON такого плана:
Кликните здесь для просмотра всего текста

{"mr":"","s":{"x":null,"a":true,"i":"tex t","t":0,"u":"link","p":null,"d":";;null ;null;0;;","n":"text","l":null},"f":["text","text"],"i":"cm0","l":"text,api_server=link,web _server=link","s":{"a":true,"d":";;null; ru_RU;0;;","i":"text","l":"ru-RU","n":"text","u":"link","x":null}}

Примечание.
text - находится текст
link - ссылка на ресурс

Строки могу отличаться длинной и содержанием. Как все знают, двойные кавычки наш любимый VB воспринимает буквально как строку. В этом случае я пытался использовать две двойные кавычки - ""text"". При обращении ко всему выражению выше я получаю такую ошибку: Оператор "&" не задан для строка "{"mr":","s":{"x":null,"a":true,"" и тип "Button".

Да, я использовал конкатенацию для вставки в необходимое место значения полученных переменных. Строка, в общем счете подсвечивается без ошибок. У меня вопрос, существует ли альтернатива записи JSON-строки в код приложения, а не загружать его из вне?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.03.2013, 15:13
Ответы с готовыми решениями:

Работа с текстом. Строка символов Visual Basic
Написать программу используя форму. Вывод текста через Edit Само задание: Дана строка символов. Вывести или все слова, в которых...

Вычисление значений функции двух переменных в Visual Basic - Visual Basic
Помогите пожалуйста! В среде VB написать программу вычисления значений функции двух переменных. Ориентировочный вид окна программы и...

Где бесплатно скачать учебник по Visual Basic 6 и Visual Basic .Net ?
Где бесплатно скачать учебник по Visual Basic 6 и Visual Basic .Net

25
 Аватар для Апострофф
9908 / 3928 / 742
Регистрация: 11.10.2011
Сообщений: 5,908
24.03.2013, 18:18
nobodyvlv, давайте Ваш код из наш любимый VB, исходную строку(надеюсь, она под спойлером?) и желаемый результат?
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
24.03.2013, 20:11
Цитата Сообщение от nobodyvlv Посмотреть сообщение
я пытался использовать две двойные кавычки
Легко запутаться.
Я бы на вашем месте использовал CHR(34) вместо кавычек.
0
18 / 17 / 2
Регистрация: 11.01.2013
Сообщений: 109
24.03.2013, 22:28  [ТС]
Вообщем, проблема со строкой формата JSON решена, вся беда была в том, что при подстановке значений переменных, я вбил не строковое значение, а имя объекта) Ну это вообще позор для меня))

Отправил я POST запрос на сервер и получил response, который довольной большой в объеме - около 190 тысячи символов, что превышает лимит строковой переменной в несколько раз. Из этого респонса я должен распарсить данные.
Но как мне "его" обработать, такой большой ответ сервера?
Возможно ли создать такого рода конвеер функций, которые будут одна за другой вытаскивать требуемые значения по порядку?

Добавлено через 7 минут
Та нет, запросы не такие большие, и я абсолютно не запутался. Но такой вариант я тоже учту в будущем. Спасибо!
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
25.03.2013, 08:34
Цитата Сообщение от nobodyvlv Посмотреть сообщение
который довольной большой в объеме - около 190 тысячи символов, что превышает лимит строковой переменной в несколько раз.
?
Строковый тип данных (String) (Visual Basic)
Строка может содержать от нуля до приблизительно двух миллиардов (2^31) знаков
Цитата Сообщение от nobodyvlv Посмотреть сообщение
получил response
Куда получил?
0
18 / 17 / 2
Регистрация: 11.01.2013
Сообщений: 109
25.03.2013, 13:17  [ТС]
Visual Basic
1
2
3
4
5
Dim postreponse As HttpWebResponse
postreponse = DirectCast(postReq.GetResponse(), HttpWebResponse)
 
Dim postreqreader As New StreamReader(postreponse.GetResponseStream())
Dim thepage As String = postreqreader.ReadToEnd
Вот так я записываю ответ сервера.
0
18 / 17 / 2
Регистрация: 11.01.2013
Сообщений: 109
25.03.2013, 13:37  [ТС]
Вот, кстати, ответ сервера, который придется долго парсить :3

P.S. Сори за мультипост, в предыдущее сообщение не получилось прикрепить файл.
Вложения
Тип файла: zip segment.zip (62.8 Кб, 16 просмотров)
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
25.03.2013, 14:25
Как вариант. Вытаскивает чат без авторов. Начало и конец определял на глаз. Для автоматизации надо изучать структуру
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Dim s() As String
   Dim File As String, CF As String   'объявим пеpеменнyю для имени файла и его cодеpжимого
   File = "c:\t3.txt"   'ycтановим имя файла и пyть
   Open File For Binary As #1   'откpоем файл для чтения
      CF = Input(FileLen(File), 1)   'загpyзить в пеpеменyю CF вcе cодеpжимое файла
   Close #1   'закpыть файл
   q = """" & ":" & """"
   s = Split(CF, q)
      q = """" & "i" & """"
   For i = 11 To 105
     W = Split(s(i), q)(0)
     Debug.Print Left(W, Len(W) - 3)
   Next i
0
18 / 17 / 2
Регистрация: 11.01.2013
Сообщений: 109
25.03.2013, 15:43  [ТС]
Alex77755, т.е., вы мне предлагаете записать полученный ответ в файл и его уже парсить?
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
25.03.2013, 15:47
Зачем? Он же уже есть в переменной!
А у меня нет! Вот я и брал из файла

Добавлено через 1 минуту
thepage там то, что я брал из файла
0
18 / 17 / 2
Регистрация: 11.01.2013
Сообщений: 109
25.03.2013, 17:06  [ТС]
Попытался вывести данные из строки в TextBox:

Через функцию Length() выводит примерно 60к символов. Почему не отображается строка в TextBox? Значение MaxLength выставил 120 000.

Добавлено через 41 минуту
Пусть модераторы простят меня за мультипост)

Вообщем пошел другим путем. Взял полученный ответ и записал его в файл, чтобы наверняка уже убедиться, что я пытаюсь впихнуть в TextBox. Вот, что получилось:

Проблема с коридовкой? Или, как я предполагаю, ответ приходит в сжатом виде, так как в чарли просмотрел заголовки:
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Expires: -1
Server: Microsoft-IIS/7.5
Date: Mon, 25 Mar 2013 13:05:41 GMT
Content-Length: 63022
X-Charles-Received-Continue: HTTP/1.1 100 Continue
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
25.03.2013, 17:10
Да. Проблемы с кодировкой.
Я сохранял в файл из блокнота с разными кодировками.
Перекодировку можно сделать и программно
1
18 / 17 / 2
Регистрация: 11.01.2013
Сообщений: 109
25.03.2013, 18:26  [ТС]
Цитата Сообщение от Alex77755 Посмотреть сообщение
Да. Проблемы с кодировкой.
Я сохранял в файл из блокнота с разными кодировками.
Перекодировку можно сделать и программно
Сейчас переведу в utf-8 и сообщу результат. Спасибо за поддержку!
0
18 / 17 / 2
Регистрация: 11.01.2013
Сообщений: 109
25.03.2013, 19:47  [ТС]
С кодировкой завал. Не могу определить, какая она вообще изначально записывается
Вложения
Тип файла: zip test.zip (53.5 Кб, 15 просмотров)
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
25.03.2013, 21:21
А как записывал в файл?
И как выкладывал содержание на форум?

Добавлено через 8 минут
Сейчас переведу в utf-8
Похоже надо ноаборот! Из utf-8 в ANSI

Visual Basic
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
Private Declare Function MultiByteToWideChar Lib "kernel32.dll" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Private Declare Function WideCharToMultiByte Lib "kernel32.dll" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long
 
Private Const CP_UTF8 As Long = 65001
 
Public Function UTF8ToWin(ByVal inString As String) As String
        Dim hMemLock1   As Long, hMemLock2  As Long
        Dim iStrSize    As Long, lMaxSize As Long, str1 As String, str2 As String
     ' судя по описанию функции, строка должна быть NULL-terminated
        inString = inString & vbNullChar '& vbNullChar
     'Но всё работает и без этого :) Оставил на всякий пожарный
 
        lMaxSize = Len(inString)
        str1 = String$(lMaxSize, 0&)
        str2 = String$(lMaxSize, 0&)
        hMemLock1 = StrPtr(str1)
        hMemLock2 = StrPtr(str2)
 
'        hMemLock1 = LocalAlloc(LMEM_ZEROINIT, lMaxSize)' при этом способе бейсик иногда падал
'        hMemLock2 = LocalAlloc(LMEM_ZEROINIT, lMaxSize)
 
 
        iStrSize = MultiByteToWideChar(CP_UTF8, 0&, inString, &HFFFF, hMemLock1, lMaxSize)
        iStrSize = WideCharToMultiByte(0&, 0&, hMemLock1, &HFFFF, hMemLock2, iStrSize, 0&, 0&)
 
        If Len(iStrSize) Then
        UTF8ToWin = StrConv(str2, vbUnicode)
'            UTF8ToWin = String$(iStrSize, 0&)
'            Call CopyMemory(ByVal UTF8ToWin, ByVal hMemLock2, iStrSize)
        End If
 
'        Call LocalFree(hMemLock1)
'        Call LocalFree(hMemLock2)
End Function
Вызывать так:

Visual Basic
1
outstring=UTF8ToWin(instring, Len(instring))
1
18 / 17 / 2
Регистрация: 11.01.2013
Сообщений: 109
26.03.2013, 12:17  [ТС]
Записывал так:
Visual Basic
1
2
3
4
5
6
7
Dim postreponse As HttpWebResponse 'переменная для ответа из сервера
postreponse = DirectCast(postReq.GetResponse(), HttpWebResponse)
 
Dim postreqreader As New StreamReader(postreponse.GetResponseStream())
Dim thepage As String = postreqreader.ReadToEnd 'записали в строковую переменную
 
My.Computer.FileSystem.WriteAllText("C:\test", thepage, True) 'записали в файл
Само содержимое респонса смотрел через Чарли.

Цитата Сообщение от Alex77755 Посмотреть сообщение
Похоже надо ноаборот! Из utf-8 в ANSI
Да, я уже когда перечитывал сообщение понял, что вместо "в", нужно было написать "из".)

Добавлено через 12 секунд
Записывал так:
Visual Basic
1
2
3
4
5
6
7
Dim postreponse As HttpWebResponse 'переменная для ответа из сервера
postreponse = DirectCast(postReq.GetResponse(), HttpWebResponse)
 
Dim postreqreader As New StreamReader(postreponse.GetResponseStream())
Dim thepage As String = postreqreader.ReadToEnd 'записали в строковую переменную
 
My.Computer.FileSystem.WriteAllText("C:\test", thepage, True) 'записали в файл
Само содержимое респонса смотрел через Чарли.

Цитата Сообщение от Alex77755 Посмотреть сообщение
Похоже надо ноаборот! Из utf-8 в ANSI
Да, я уже когда перечитывал сообщение понял, что вместо "в", нужно было написать "из".)

Добавлено через 14 часов 30 минут
Вообщем перепробовал все кодировки и все равно кракозяблы!
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
26.03.2013, 13:40
Может попробовать указать кодировку?
Visual Basic
1
My.Computer.FileSystem.WriteAllText("C:\test", thepage, True, System.Text.Encoding.GetEncoding(1251))
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
26.03.2013, 22:08
Похоже, файл бинарный.
0
18 / 17 / 2
Регистрация: 11.01.2013
Сообщений: 109
27.03.2013, 13:54  [ТС]
Нет. Решилось все добавлением декомпрессии потока gzip

Visual Basic
1
postReq.AutomaticDecompression = DecompressionMethods.GZip
0
388 / 8 / 3
Регистрация: 28.05.2013
Сообщений: 58
28.05.2013, 20:57
nobodyvlv, Извеняююсь, если не сюда написал НО тут вы увидите. Занимаюсь похожей задачей. Нашел алгоритм как весь этот объем приводить к читабельному виду. НО у меня такая проблема когда отправляю запрос серверу с параметром, в ответ прилетает ошибка 400. Не могли бы поделиться как у вас получилось отправлять запрос через WinSocks
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.05.2013, 20:57
Помогаю со студенческими работами здесь

Visual Basic 6 и Visual Basic .NET - в чем различия?
Visual Basic и Visual studio это не одно и тоже? если нет то в чём разница, по мимо оформления?

Отличия версий Visual Basic 6.0 от Visual Basic 6.5?
У меня 3 вопроса: 1.Чем отличается версия Visual Basic 6.0 от Visual Basic 6.5? 2.Можно ли запустить проект созданный раннее в Visual...

Непонятная строка на Visual Basic
Помогите понять, как работают следующие строки кода в Visual Basic: Worksheets(1).Range("d7").Value = Worksheets(1).Cells(SB2 +...

Visual Basic .Net и Visual Basic 6.0 - В чём разница
В общем возник вопрос: Visual Bisic.Net и Visual Basic - это два разных языка, или же .NET версия это лишь его улучшение. Я так понимаю что...

Какую среду программирования лучше выбрать для обучения языку C++ ? Visual Studio,Visual Basic или Visual C++?
И напишите,чем рекомендуемая вами среда программирования лучше других? Насколько я понял из Википедии они все поддерживают язык...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru