Deserializing JSON in Visual basic

json, vb.net

Solution

Since you're importing `Newtonsoft.Json`, you can just use the `JsonConvert.DeserializeObject<T>(String)` method:

Dim exampleJson As String = "{ 'no':'123', 'name':'Some Name', 'com':'This is a comment'}"
Dim post As Post = JsonConvert.DeserializeObject(Of Post)(exampleJson)
Dim com As String = post.com
post_text_box.Text = com

Alternatively, if you don't want to create a class for `Post`, you can use `JsonConvert.DeserializeAnonymousType<T>(String, T)`:

Dim exampleJson As String = "{ 'no':'123', 'name':'Some Name', 'com':'This is a comment'}"
Dim tempPost = New With {Key .com = ""}
Dim post = JsonConvert.DeserializeAnonymousType(exampleJson, tempPost)
Dim com As String = post.com
post_text_box.Text = com

EDIT: It looks like you're getting an array back from the API:

{
    "posts" : [{
            "no" : 38161812,
            "now" : "11\/19\/13(Tue)15:18",
            "name" : "Anonymous",
            "com" : ‌​ "testing thread for JSON stuff",
            "filename" : "a4c",
            "ext" : ".png",
            "w" : 386,
            "h" : 378,
            "tn_w" : 250,
            "tn_h" : 244,
            "tim" ‌​ : 1384892303386,
            "time" : 1384892303,
            "md5" : "tig\/aNmBqB+zOZY5upx1Fw==",
            "fsize" : 6234,
            "‌​resto" : 0,
            "bumplimit" : 0,
            "imagelimit" : 0,
            "replies" : 0,
            "images" : 0
        }
    ]
}

In that case, you will need to change the type that is being deserialized to `Post()`:

First, add another small wrapper class:

Public Class PostWrapper
    Public posts() As Post
End Class

Then adjust your deserialization code:

Dim json As String = input_box.Text
Dim postWrapper = JsonConvert.DeserializeObject(Of PostWrapper)(json) ' Deserialize array of Post objects
Dim posts = postWrapper.posts

If posts.Length = 1 Then ' or whatever condition you prefer
    post_text_box.Text = posts(0).com
End If

Problem

Basically, I'm trying to parse the comments from a 4chan thread using the 4chan JSON API. https://github.com/4chan/4chan-API basically, there is one rich text box called input, and another called post_text_box. What im trying to do is make it so that JSON from a 4chan thread entered in the input text box, and comments are extracted from that JSON and displayed in the output text box however, whenever I try clicking the Go button nothing happens. Here is my code so far ``` Imports System.Web.Script.Serialization Imports Newtonsoft.Json Imports Newtonsoft.Json.Linq Public Class Form1 Private Sub start_button_Click(sender As Object, e As EventArgs) Handles start_button.Click Dim j As Object = New JavaScriptSerializer().Deserialize(Of Post)(input.Text) post_text_box.Text = j.com End Sub End Class Public Class Rootobject Public Property posts() As Post End Class Public Class Post Public Property no As Integer Public Property now As String Public Property name As String Public Property com As String Public Property filename As String Public Property ext As String Public Property w As Integer Public Property h As Integer Public Property tn_w As Integer Public Property tn_h As Integer Public Property tim As Long Public Property time As Integer Public Property md5 As String Public Property fsize As Integer Public Property resto As Integer Public Property bumplimit As Integer Public Property imagelimit As Integer Public Property replies As Integer Public Property images As Integer End Class ```

Original source