Как читать ответ JSON http post с помощью VB
У меня есть следующий код: он подключается к серверу PHP и извлекает данные успешно, я не очень хорошо разбираюсь в VB, как я могу прочитать текст ответа JSON и извлечь его?
Public Class Form1
Private Sub submit_Click(sender As System.Object, e As System.EventArgs) Handles submit.Click
Dim user As String
Dim pass As String
user = uname.Text
pass = passwd.Text
Dim request As WebRequest = WebRequest.Create("http://domain.com/test.php")
request.Method = "POST"
Dim postData As String
postData = "username=" & user & "&password=" & pass
Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
request.ContentType = "application/x-www-form-urlencoded"
request.ContentLength = byteArray.Length
Dim dataStream As Stream = request.GetRequestStream()
dataStream.Write(byteArray, 0, byteArray.Length)
dataStream.Close()
Dim response As WebResponse = request.GetResponse()
Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
dataStream = response.GetResponseStream()
Dim reader As New StreamReader(dataStream)
Dim responseFromServer As String = reader.ReadToEnd()
If responseFromServer = "0" Then
MsgBox("Login Failed")
Else
MsgBox("json data")
End If
reader.Close()
dataStream.Close()
response.Close()
End Sub
End Class
Ответ JSON будет примерно таким:
{"comments": [
{
"comment" : "some text",
"date" : "some date",
"user" : "user name"
},
{
"comment" : "some text",
"date" : "some date",
"user" : "user name"
}
],
"messages": [ .... ]
}
Как вывести строку json в:
Comments
user date comment
-----------------------------------
user 1 date 1 comment 1
user 2 date 2 comment 2
Messages
user date message
-----------------------------------
user 1 date 1 message 1
user 2 date 2 message 2
Ответы
Ответ 1
После долгих исследований и многих тестов я обнаружил очень приятное расширение под названием Newtonsoft.json
, оно очень простое и может быть установлено из package manager console
следующим образом:
install-package Newtonsoft.json
И включите его вот так:
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
Тогда все, что мне нужно сделать, - объявить имена элементов и их значения следующим образом:
Else
Dim json As String = responseFromServer
Dim ser As JObject = JObject.Parse(json)
Dim data As List(Of JToken) = ser.Children().ToList
Dim output As String = ""
For Each item As JProperty In data
item.CreateReader()
Select Case item.Name
Case "comments"
output += "Comments:" + vbCrLf
For Each comment As JObject In item.Values
Dim u As String = comment("user")
Dim d As String = comment("date")
Dim c As String = comment("comment")
output += u + vbTab + d + vbTab + c + vbCrLf
Next
Case "messages"
output += "Messages:" + vbCrLf
For Each msg As JObject In item.Values
Dim f As String = msg("from")
Dim t As String = msg("to")
Dim d As String = msg("date")
Dim m As String = msg("message")
Dim s As String = msg("status")
output += f + vbTab + t + vbTab + d + vbTab + m + vbTab + s + vbCrLf
Next
End Select
Next
MsgBox(output)
End If
надеюсь, что кто-то найдет это полезным
Ответ 2
@razzak абсолютно прав на использование пакета Json.Net NuGet. Другим вариантом, который резко сократил бы это, является использование встроенной функции DeserializeObject. Пока у вас есть хорошо определенная модель, вы можете десериализовать Json прямо в экземпляр объекта, используя что-то вроде этого:
dim myObject as MyDefinedObject = JsonConvert.DeserializeObject(responseFromServer)
или это в С#
MyDefinedObject m = JsonConvert.DeserializeObject<MyDefinedObject>(responseFromServer);
Кроме того, если вы не хотите использовать цикл, вы также можете выбрать маркеры, используя что-то вроде этого:
Dim d = ser.SelectToken("$..resources[?(@)].travelDistance")
Этот код был использован для определения расстояния между двумя точками от Bing API. Если вы когда-либо обращались с API REST Bing или Google Map, то вы знаете, что JSon, как правило, слишком велик, чтобы перебирать данные, когда вы ищете очень конкретные значения.
Надеюсь, это полезно для тех, кто хочет сделать что-то подобное. На веб-сайте JSon.Net есть страница блога, которая содержит некоторые дополнительные примеры.
http://james.newtonking.com/json
~ Приветствия
Ответ 3
Чтобы использовать
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
Библиотека 'Json.Net' должна быть установлена.
![screenshot]()
Ответ 4
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
Кажется, это сократило его на VB.net для API youtube V.3
конечно, это зависит от того, что вы пытаетесь выполнить
но Youtube возвращает данные как формат Json