How to read JSON http post response using VB
vb.net, visual-studio-2010
Solution
After long research and many tests I found out a very nice extension called `Newtonsoft.json`, it's extremely simple and can be installed from `package manager console` like this:
install-package Newtonsoft.json
And include it like this:
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
Then all i needed to do is to declare the elements names and values like this:
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
hope someone will find this useful
Problem
I have the following code, it connects to PHP server and retrieve data successfully, i'm not very good with VB, how can i read the JSON response text and extract it's elements? ``` 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 ``` The JSON response would be something like: ``` {"comments": [ { "comment" : "some text", "date" : "some date", "user" : "user name" }, { "comment" : "some text", "date" : "some date", "user" : "user name" } ], "messages": [ .... ] } ``` How to output the json string into: ``` 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 ```