Home > database >  Getting info from JSON in VB.NET using Json.NET
Getting info from JSON in VB.NET using Json.NET

Time:12-18

I need to process this JSON:

{
"companies": [
    {
        "companyId": "S86jhs89F",
        "companyName": "LoremIpsum"
    }
],
"response_metadata": {
    "next_cursor": 659,
    "next_link": "somedata"
} }

How can I get companyId, companyName, next_cursor and next_link using VB.NET?

Update...

I found this...

Dim json As String = "{ ... textJSON ... }"
Dim ser As JObject = JObject.Parse(json)
Dim data As List(Of JToken) = ser.Children().ToList
Dim output As String = ""
For Each grupo As JProperty In data
    grupo.CreateReader()
    Select Case grupo.Name
        Case "companies"
            For Each item As JObject In grupo.Values
                output  = vbCrLf   " -- "   item("companyId").ToString
                output  = vbCrLf   " -- "   item("companyName").ToString
            Next
        Case "response_metadata"
            Dim dato As JObject = grupo.Value
            output  = vbCrLf   " -- "   dato("next_cursor").ToString
    End Select
Next

I don´t know if this is the optimal way, but it is working...

CodePudding user response:

Visual Studio has a cool feature called Paste JSON as Classes that can be found under Edit > Paste Special > Paste JSON as Classes. If you were to do this, then you would get something that looks like the following:


Public Class Rootobject
    Public Property companies() As Company
    Public Property response_metadata As Response_Metadata
End Class

Public Class Response_Metadata
    Public Property next_cursor As Integer
    Public Property next_link As String
End Class

Public Class Company
    Public Property companyId As String
    Public Property companyName As String
End Class

You can use decorators to make the property names conform to a more .NET style if you wanted:


Public Class Rootobject
    <JsonProperty("companies")>
    Public Property Companies As IEnumerable(Of Company)

    <JsonProperty("response_metadata")>
    Public Property ResponseMetadata As Response_Metadata
End Class

Public Class Response_Metadata

    <JsonProperty("next_cursor")>
    Public Property NextCursor As Integer

    <JsonProperty("next_link")>
    Public Property NextLink As String
End Class

Public Class Company

    <JsonProperty("companyId")>
    Public Property CompanyId As String


    <JsonProperty("companyName")>
    Public Property CompanyName As String
End Class

Now you would use JsonConvert.DeserializeObject to convert the JSON literal to your root object. After that, it's just a matter of getting the required properties:

Dim conversion = JsonConvert.DeserializeObject(Of Rootobject)(literal)
Dim companyId = conversion.Companies.First().CompanyId
Dim companyName = conversion.Companies.First().CompanyName
' etc.

Example: https://dotnetfiddle.net/GiGKwI

  • Related