Comment lire JSON http de la réponse post à l'aide de VB
J'ai le code suivant, il se connecte au serveur PHP et récupérer les données avec succès, je ne suis pas très bon avec VB, comment puis-je lire le texte de la réponse JSON et l'extraire des é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": [ .... ]
}
La façon de sortie de 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
Créer un objet qui correspond à la structure du JSON et désérialiser. Découvrez ce post: stackoverflow.com/questions/8118019/vb-net-json-deserialize
je ne suis pas sûr que je sais ce que je fais mais cela dit
Légère recommandation, lors de la création d'objets(les ruisseaux, les webresponse) qui mettent en œuvre des IDisposable, je vous recommande de les envelopper dans une instruction d'utilisation.
Toute personne de penser à l'aide de ce code, assurez-vous de fixer le nom d'utilisateur et le mot de passe en transit. Utiliser SSL ou d'une clé privée pour crypter les données avant de les envoyer à travers le réseau. Je vais faire l'hypothèse que le mot de passe est crypté dans une autre partie de l'application. En fait, il serait plus judicieux d'utiliser une clé publique (GUID) au lieu du mot de passe. Cela permettra d'assurer que vous êtes correctement protéger vos clients de mot de passe.
je ne suis pas sûr que je sais ce que je fais mais cela dit
System.Runtime.Serialization.Json.DataContractJsonSerializer(data.GetType())
n'est pas définie lorsque j'ai mis Dim ser As New System.Runtime.Serialization.Json.DataContractJsonSerializer(data.GetType())
! pourquoi donc?Légère recommandation, lors de la création d'objets(les ruisseaux, les webresponse) qui mettent en œuvre des IDisposable, je vous recommande de les envelopper dans une instruction d'utilisation.
Toute personne de penser à l'aide de ce code, assurez-vous de fixer le nom d'utilisateur et le mot de passe en transit. Utiliser SSL ou d'une clé privée pour crypter les données avant de les envoyer à travers le réseau. Je vais faire l'hypothèse que le mot de passe est crypté dans une autre partie de l'application. En fait, il serait plus judicieux d'utiliser une clé publique (GUID) au lieu du mot de passe. Cela permettra d'assurer que vous êtes correctement protéger vos clients de mot de passe.
OriginalL'auteur razzak | 2013-04-12
Vous devez vous connecter pour publier un commentaire.
Après de longues recherches et de nombreux tests, j'ai trouvé une très belle extension appelée
Newtonsoft.json
, c'est extrêmement simple et peut être installé à partir depackage manager console
comme ceci:Et l'inclure comme ceci:
Puis tout ce que je nécessaire à faire est de déclarer les éléments les noms et les valeurs comme ceci:
espère que quelqu'un va trouver cela utile
OriginalL'auteur razzak
@razzak est absolument droit d'utiliser le Json.Net package NuGet. Une autre option serait de couper cette baisse spectaculaire, est d'utiliser le construit en DeserializeObject fonction. Tant que vous avez une bien définir un modèle, alors vous pouvez désérialiser le Json à droite dans une instance de l'objet en utilisant quelque chose comme ceci:
ou dans C#
Aussi, si vous ne voulez pas de boucle, vous pouvez également sélectionner les jetons en utilisant quelque chose comme ceci:
Ce code ci-dessus a été utilisé pour localiser les travelDistance entre deux points à partir de Bing API. Si vous avez déjà eu affaire à des Bing ou Google Map Api REST, alors vous savez le JSon est généralement trop grande boucle à travers les données lorsque vous êtes à la recherche pour des valeurs très précises.
J'espère que c'est utile pour ceux qui cherchent à faire quelque chose comme cela. L'JSon.Net site a une page de blog qui passe en revue quelques exemples supplémentaires.
http://james.newtonking.com/json
~Acclamations
OriginalL'auteur Rogala
À utiliser
'Json.Net la bibliothèque doit être installé.
OriginalL'auteur msl
Ce qui semble couper VB.net pour les API youtube V. 3
bien sûr, cela dépend de ce que vous essayez d'accomplir
mais Youtube renvoie des données au format Json
OriginalL'auteur Jason