J'ai le code suivant, il se connecte au serveur PHP et récupère les données avec succès, je ne suis pas très bon avec VB, comment puis-je lire le texte de réponse JSON et extraire ses éléments?
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
La réponse JSON serait quelque chose comme:
{"comments": [
{
"comment" : "some text",
"date" : "some date",
"user" : "user name"
},
{
"comment" : "some text",
"date" : "some date",
"user" : "user name"
}
],
"messages": [ .... ]
}
Comment sortir la chaîne json dans:
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
Après de longues recherches et de nombreux tests, j'ai découvert une très jolie extension appelée Newtonsoft.json
, extrêmement simple et pouvant être installée à partir de package manager console
comme ceci:
install-package Newtonsoft.json
Et l'inclure comme ceci:
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
Il ne me restait plus qu'à déclarer les noms et les valeurs des éléments comme ceci:
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
j'espère que quelqu'un trouvera cela utile
@razzak a absolument raison d'utiliser le package Json.Net NuGet. Une autre option qui permettrait de réduire considérablement cette situation consiste à utiliser la fonction DeserializeObject intégrée. Tant que vous avez un modèle bien défini, vous pouvez alors désérialiser le Json dans une instance de l'objet en utilisant quelque chose comme:
dim myObject as MyDefinedObject = JsonConvert.DeserializeObject(responseFromServer)
ou ceci en C #
MyDefinedObject m = JsonConvert.DeserializeObject<MyDefinedObject>(responseFromServer);
De plus, si vous ne voulez pas faire de boucle, vous pouvez aussi sélectionner des jetons en utilisant quelque chose comme:
Dim d = ser.SelectToken("$..resources[?(@)].travelDistance")
Ce code ci-dessus a été utilisé pour localiser la distance de déplacement entre deux points de l'API Bing. Si vous avez déjà utilisé les API Bing ou Google Map REST, vous savez que JSon est généralement trop volumineux pour parcourir les données lorsque vous recherchez des valeurs très spécifiques.
J'espère que cela est utile pour quiconque cherche à faire quelque chose comme ça. Le site Web JSon.Net a une page de blog qui passe en revue quelques exemples supplémentaires.
http://james.newtonking.com/json
~ A bientôt
Utiliser
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
La bibliothèque 'Json.Net' doit être installée.
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
Cela semble le couper sur VB.net pour youtube API V.3
Bien sûr, cela dépend de ce que vous voulez accomplir mais Youtube renvoie les données au format Json