Need help deserializing json data - json

i have the following json string
{
"Count": 10,
"Page": 0,
"Queue": [
{
"id": "146648",
"number": "96599004970"
},
{
"id": "146647",
"number": "96599004970"
},
{
"id": "146646",
"number": "96599004970"
},
{
"id": "146645",
"number": "96599004970"
},
{
"id": "146644",
"number": "96599004970"
},
{
"id": "146643",
"number": "96599004970"
},
{
"id": "146642",
"number": "96599004970"
},
{
"id": "146641",
"number": "96599004970"
},
{
"id": "146640",
"number": "96599004970"
},
{
"id": "146639",
"number": "96599004970"
}
]
}
i'm using vb.net with newtonstoft json
i made these classes
Public Class Queue
Public Property Count As Integer
Public Property Page As Integer
Public Property Msgs As List(Of Msg)
End Class
Public Class Msg
Public Property id As String
Public Property number As String
End Class
I used this code to deserialize this string
Dim getQueue as Queue
getQueue = JsonConvert.DeserializeObject(Of Queue)(jsonString)
how can i rebuild the array? or retreive data from that queue object
any help is appreciated

To make your json string deserialized properly, your mapping class should look like this instead :
Public Class RootObject
Public Property Count As Integer
Public Property Page As Integer
Public Property Queue As List(Of Queue)
End Class
Public Class Queue
Public Property id As String
Public Property number As String
End Class
Then you can do as follow :
Dim getQueue as RootObject
getQueue = JsonConvert.DeserializeObject(Of RootObject)(jsonString)
For Each Q As Queue In getQueue.Queue
'here you can access each Queue object
Next
NB: above class definitions are translated from C# classes generated using http://json2csharp.com/ tool. That is a handy online tool to generate classes suitable for mapping your json.

The following code prints id and number values for each msgs:
For Each msg As Msg In getQueue.Msgs
Console.WriteLine("id: " + msg.id & ", number: " + msg.number)
Next

try this. Sorry its in C# as I dont know VB.net
var JsonStr = JsonConvert.DeserializeObject<Queue>(jsonString);
label1.Text = JsonStr.Count
label2.Text = JsonStr.Page
for (int i = 0; i < JsonStr.Msg.Count; i++)
{
label3.Text = JsonStr.Msg[i].id;
label4.Text = JsonStr.Msg[i].number;
}

Related

Having issues creating proper class for JSON.Net Deserialization of complex object. Receiving {"Cannot deserialize the current JSON array

This is a VB.Net project. Cannot seem to get the class library correct for deserializing the response string to the classes.
Error we receive when we try to deserialize is:
Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'blahblah_Framework_Root.blahblah+Tokenscopelist'
because the type requires a JSON object (e.g. {""name"":""value""}) to deserialize correctly.
Sample response trying to deserialize:
{
"data": {
"expiresAt": "2021-11-27T01:12:05.000Z",
"createdAt": "2021-11-13T01:12:05.000Z",
"identityId": 2347335,
"identity": {
"id": 2347335,
"namespace": {
"id": 7760,
"nickname": "org:random-parking"
}
},
"tokenScopeList": [
{
"org": {
"id": 5995,
"name": "RANDOM Parking",
"opal": "opal:prod:helium:alpha:5995:org:5995",
"parentOrg": null,
"packagePlans": [
{
"id": 50,
"package": {
"id": 14,
"name": "Additional Users Over 500",
"packageFeatures": [
{
"config": null,
"id": 147,
"feature": {
"id": 1,
"name": "Users Included",
"code": "users"
}
}
]
},
"isSelected": true
},
{
"id": 54,
"package": {
"id": 15,
"name": "Elevator I/O Boards",
"packageFeatures": [
{
"config": null,
"id": 175,
"feature": {
"id": 21,
"name": "Elevator I/O Boards",
"code": "elevatorIoBoards"
}
}
]
},
"isSelected": true
},
{
"id": 38,
"package": {
"id": 11,
"name": "Premium",
"packageFeatures": [
{
"config": {
"count": 500
},
"id": 91,
"feature": {
"id": 1,
"name": "Users Included",
"code": "users"
}
},
{
"config": {
"count": 1000000
},
"id": 92,
"feature": {
"id": 2,
"name": "Administrators",
"code": "administrators"
}
}
]
},
"isSelected": true
}
]
},
"user": {
"id": 2502299,
"opal": "opal:prod:helium:alpha:5995:user:2502299"
},
"scope": [
"o5995-admin:r",
"o5995-admin:w",
"o5995-configurations:r",
"o5995-configurations:w",
"o5995-dash:r",
"o5995-dash:w",
"o5995-videoProviderPlayback:w"
]
},
{
"org": {
"id": null,
"name": null
},
"user": {
"id": null,
"opal": null
},
"scope": [
"i2347335:r",
"i2347335:w"
]
}
],
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVw"
},
"meta": {
"accessToken": null
}
}
Using this class definition
Public Class RootobjectLogin
Public Property data As DataumLogin
Public Property meta As Meta
End Class
Public Class DataumLogin
Public Property expiresAt As Date
Public Property createdAt As Date
Public Property identityId As Integer
Public Property identity As Identity
Public Property tokenScopeList() As Tokenscopelist
Public Property token As String
End Class
Public Class Tokenscopelist
Public Property org As Org
Public Property user As User
Public Property scope() As String
End Class
Public Class Packageplan
Public Property id As Integer
Public Property package As Package
Public Property isSelected As Boolean
End Class
Public Class Package
Public Property id As Integer
Public Property name As String
Public Property packageFeatures() As New List(Of Packagefeature)
End Class
Public Class Packagefeature
Public Property config As Config
Public Property id As Integer
Public Property feature As Feature
End Class
Public Class Config
Public Property count As Integer
End Class
Public Class Feature
Public Property id As Integer
Public Property name As String
Public Property code As String
End Class
Public Class User
Public Property id As Integer
Public Property opal As String
End Class
Public Class Org
Public Property id As Integer
Public Property name As String
Public Property opal As String
Public Property parentOrg As Object
Public Property packagePlans() As New List(Of Packageplan)
End Class
Public Class Meta
Public Property accessToken As Accesstoken
End Class
Ideas?

VB.net VB Serializing JSON Property Name issue

I'm having an issue with a JSON property name. It might be because I don't know what I'm doing. This is my 1st attempt at serializing JSON (with vb.net VB)
The result I'm looking for is this:
{
"login": {
"username": "XXX",
"password": "pwxXXxx",
"busId": "123456789",
"busRole": "Third Party",
"paymentTerms": "Prepaid"
}
}
This is what I am getting:
[
{
"login": null,
"username": "1234",
"password": "pw123456",
"busId": "12345",
"busRole": "Third Party",
"paymentTerms": "Prepaid"
}
]
My issue is with the piece "login": {" adds the colon and the term null. I'll post my code below
Any help would be appreciated.
-Thank You
Partial Class _Default
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim loads As New List(Of fgtload)()
loads.Add(New fgtload() With {
.username = "1234",
.password = "pw123456",
.busId = "12345",
.busRole = "Third Party",
.paymentTerms = "Prepaid"
}
)
Dim strserialize As String = JsonConvert.SerializeObject(loads)
lblserial.Text = strserialize
End Sub
Public Class fgtload
<JsonProperty(PropertyName:="login")>
Public Property login As String
Public Property username() As String
Get
Return m_username
End Get
Set
m_username = Value
End Set
End Property
Private m_username As String
Public Property password() As String
Get
Return m_password
End Get
Set
m_password = Value
End Set
End Property
Private m_password As String
Public Property busId() As String
Get
Return m_busId
End Get
Set
m_busId = Value
End Set
End Property
Private m_busId As String
Public Property busRole() As String
Get
Return m_busRole
End Get
Set
m_busRole = Value
End Set
End Property
Private m_busRole As String
Public Property paymentTerms() As String
Get
Return m_paymentTerms
End Get
Set
m_paymentTerms = Value
End Set
End Property
Private m_paymentTerms As String
End Class
Here's the entire JSON output sampel Im trying to get.
{
"login": {
"username": "XXX",
"password": "pwxXXxx",
"busId": "123456789",
"busRole": "Third Party",
"paymentTerms": "Prepaid"
}
}
,
"details": {
"serviceClass": "STD",
"typeQuery": "QUOTE",
"pickupDate": "20200221",
"productCode": "DFQ"
},
"originLocation": {
"city": "Keyport",
"state": "NJ",
"postalCode": "07735",
"country": "USA",
"locationType": "COMM"
},
"destinationLocation": {
"city": "Beverly Hills",
"state": "CA",
"postalCode": "90210",
"country": "USA",
"locationType": "COMM"
},
"listOfCommodities": {
"commodity": [
{
"packageLength": 48,
"packageWidth": 48,
"packageHeight": 48,
"weight": 1500,
"handlingUnits": 1,
"packageCode": "PLT"
}
]
}
}
How would I add another class to the wrapper. For example
Public Class fgtDetails '
Public ServiceClass As String
Public typeQuery As String
Public pickupDate As Integer
Public productCode As String
End Class
From what I can see, you are trying to declare the login element as an empty string and is therefore serialized as null. From what you said you are trying to achieve, you want to declare login as an object that contains the Username, Password, BusID, BusRole, and PaymentTerms properties.
From what your looking for, the Login property is an object, but you are declaring it as a string. Also, you are creating a list and serializing that, which is leading to those square brackets ([, ]) around your JSON. Square brackets mark arrays or enumerations, whereas in your sample JSON you are just looking for an object.
One last tip, for classes that are used for serializing, you don't have to use properties. You can just declare your variables as public variables. The only time you need to use properties is if you need to modify or do something with its contents when it's being set or read. e.g., formatting a string when it's being set, or calculating a response when the variable is being retrieved (you can put code in the GET and SET methods to make them act like a function).
Something to note with serializing and deserializing, you can nest classes. When serialized they will be converted to JSON objects using the same object layout and variable name. So you can try something like this:
(UPDATED CODE)
Public Sub CreateJson()
'Create Wrapper Object
Dim Load As New fgtload
Load.Login = New fgtLoginData With { 'Create Login Data
.Username = "XXX",
.Password = "pwxXXxx",
.BusID = 123456789,
.BusRole = "Third Party",
.PaymentTerms = "Prepaid"
}
Load.Details = New fgtDetailsData With { 'Create Details
.ServiceClass = "STD",
.TypeQuery = "QUOTE",
.PickupDate = "20200221",
.ProductCode = "DFQ"
}
Load.OriginLocation = New fgtLocationnData With { 'Create Origin
.City = "Keyport",
.State = "NJ",
.PostalCode = 7735,
.Country = "USA",
.LocationType = "COMM"
}
Load.DestinationLocation = New fgtLocationnData With { 'Create Destination
.City = "Beverly Hills",
.State = "CA",
.PostalCode = 90210,
.Country = "USA",
.LocationType = "COMM"
}
'Create Commodities
Dim Commodity1 As New fgtCommodity With {
.PackageLength = 48,
.PackageWidth = 48,
.PackageHeight = 48,
.Weight = 1500,
.HandlingUnits = 1,
.PackageCode = "PLT"
}
'Add commodity to load
Load.ListOfCommodities.commodity.Add(Commodity1)
'Serialize wrapper object
Dim Json As String = JsonConvert.SerializeObject(Load)
End Sub
Public Class fgtload 'Primary wrapper
Public Login As New fgtLoginData
Public Details As New fgtDetailsData
Public OriginLocation As New fgtLocationnData
Public DestinationLocation As New fgtLocationnData
Public ListOfCommodities As New fgtCommodityWrapper
End Class
Public Class fgtLoginData 'Login Data
Public Username As String
Public Password As String
Public BusID As String
Public BusRole As String
Public PaymentTerms As String
End Class
Public Class fgtDetailsData 'Details Data
Public ServiceClass As String
Public TypeQuery As String
Public PickupDate As String
Public ProductCode As String
End Class
Public Class fgtLocationnData 'Location data for both Origin and Destination
Public City As String
Public State As String
Public PostalCode As String
Public Country As String
Public LocationType As String
End Class
Public Class fgtCommodityWrapper 'Commodity Data
Public commodity As New List(Of fgtCommodity) ' Lists get serialized into arrays
End Class
Public Class fgtCommodity
Public PackageLength As Double 'Doubles to allow floating-point numbers
Public PackageWidth As Double
Public PackageHeight As Double
Public Weight As Double
Public HandlingUnits As Integer
Public PackageCode As String
End Class
This creates this response.
(UPDATED OUTPUT)
{
"Login": {
"Username": "XXX",
"Password": "pwxXXxx",
"BusID": "123456789",
"BusRole": "Third Party",
"PaymentTerms": "Prepaid"
},
"Details": {
"ServiceClass": "STD",
"TypeQuery": "QUOTE",
"PickupDate": "20200221",
"ProductCode": "DFQ"
},
"OriginLocation": {
"City": "Keyport",
"State": "NJ",
"PostalCode": "7735",
"Country": "USA",
"LocationType": "COMM"
},
"DestinationLocation": {
"City": "Beverly Hills",
"State": "CA",
"PostalCode": "90210",
"Country": "USA",
"LocationType": "COMM"
},
"ListOfCommodities": {
"commodity": [
{
"PackageLength": 48.0,
"PackageWidth": 48.0,
"PackageHeight": 48.0,
"Weight": 1500.0,
"HandlingUnits": 1,
"PackageCode": "PLT"
}
]
}
}
Hope this helps.
(UPDATE NOTES):
In response to your comment, I have modified the code in my response to allow or your updated expected output.
Note also that if two JSON objects have the same structure (in this case originLocation and destinationLocation) you can use the same class.
Also, see at the Commodity Data there are square brackets, this marks a JSON array. Arrays/Lists/Enumerations in your code will be serialized into JSON arrays, even if they are of a class type. So in this code example, you can add as many commodities to ListOfCommodities.commodity as you want and they will be properly serialized into JSON.

Json not derserialising correctly

Json string is not deserialsing correctly
have played around with my classes etc, but bfevent always returns Nothing
have tried Public Property bfevent As BFEvent() in case it needs to be able to take multi values
pretty sure it's something simple....
strcatalogue = "{ "jsonrpc": "2.0", "result": [{ "event": { "id": "29202748", "name": "Kings XI Punjab v Mumbai Indians", "countryCode": "GB", "timezone": "GMT", "openDate": "2019-03-30T10:30:00.000Z" }, "marketCount": 20 }, { "event": { "id": "29201119", "name": "Victoria v NSW Blues", "countryCode": "AU", "timezone": "GMT", "openDate": "2019-03-27T23:30:00.000Z" }, "marketCount": 2 }, { "event": { "id": "29202753", "name": "Chennai Super Kings v Rajasthan Royals", "countryCode": "GB", "timezone": "GMT", "openDate": "2019-03-31T14:30:00.000Z" }, "marketCount": 35 }], "id": 1 }"
Dim objJson = JsonConvert.DeserializeObject(Of BFEventList)(strCatalogue)
Public Class BFEvent
Public Property id As String
Public Property name As String
Public Property countryCode As String
Public Property timezone As String
Public Property openDate As DateTime
End Class
Public Class BFResult
Public Property bfevent As BFEvent
Public Property marketCount As Integer
End Class
Public Class BFEventList
Public Property jsonrpc As String
Public Property result As BFResult()
Public Property id As Integer
End Class
BFEvent = Nothing
marketCount works fine, so something to do with BFEvents class
So i renamed my class to refer to the actual string values in the json. So bfevent is now event. I'm not sure if this is 'required' or not. Will test that elsewhere where i have working code.
But am now getting 'Keyword is not a valid identifier' for
Public Property Event As BFEvent()
with Event underlined.
No errors here
Dim Name As String = objJson.result(0).Event(0).name
But cannot compile due to above error

VB & Rotten Tomatoes JSON API

I'm trying to allow a user to enter a film title into my program, then have the program return the top three matching films in the rotten tomatoes database.
Here's the code I have so far:
Private Sub Query(ByVal searchTerm As String)
'declare the url, request, response and reader,
Dim url As String
Dim request As HttpWebRequest
Dim response As HttpWebResponse = Nothing
Dim reader As StreamReader
Console.BackgroundColor = ConsoleColor.Red : Console.WriteLine(" QUERYING ROTTEN TOMATOES FOR THE SEARCHTERM {0} ", searchTerm) : Console.BackgroundColor = ConsoleColor.Black
Try
'base url, query, apikey, page (or result) limit,
url = String.Format("http://api.rottentomatoes.com/api/public/v1.0/movies.json?q={0}&apikey={1}&page_limit={2}", searchTerm, myApiKey, "3")
'make the request
request = DirectCast(WebRequest.Create(url), HttpWebRequest)
'get the response
response = DirectCast(request.GetResponse(), HttpWebResponse)
'read the response
reader = New StreamReader(response.GetResponseStream())
'declare a string for the raw response
Dim rawResponse As String
'get the response a raw string
rawResponse = reader.ReadToEnd()
'write the raw response to the console
Console.WriteLine(rawResponse)
'write that the rest of the data is specific
Console.BackgroundColor = ConsoleColor.Red : Console.WriteLine(" EXTRACTED DATA: ") : Console.BackgroundColor = ConsoleColor.Black
'parse the results from the rawresponse
Dim jResults As JObject = JObject.Parse(rawResponse)
Console.WriteLine(ParseTitle(jResults("total")))
Console.WriteLine(ParseTitle(jResults("title")))
'Console.WriteLine(ParseTitle(jResults("critics_score")))
Catch ex As Exception
Console.WriteLine("Error: " & ex.ToString)
Finally
If Not response Is Nothing Then response.Close()
End Try
Console.BackgroundColor = ConsoleColor.Red : Console.WriteLine(" QUERY FINISHED. PRESS ANY KEY TO CLOSE... ") : Console.BackgroundColor = ConsoleColor.Black
Console.ReadKey()
End Sub
I'm using the JSON.Net library, and, truthfully, have no experience with JSON - I've been working of off tutorials.
I'd like to be able to get all the films returned to an array of Movie data structures Can anyone help me out?
Here's the response I get if I search for 'toy story':
{
"total": 7,
"movies": [
{
"id": "770672122",
"title": "Toy Story 3",
"year": 2010,
"mpaa_rating": "G",
"runtime": 103,
"critics_consensus": "Deftlyblending comedy, adventure, and honest emotion, Toy Story 3 is a raresecond sequel that reallyworks.",
"release_dates": {
"theater": "2010-06-18",
"dvd": "2010-11-02"
},
"ratings": {
"critics_rating": "CertifiedFresh",
"critics_score": 99,
"audience_rating": "Upright",
"audience_score": 91
},
"synopsis": "Pixarreturns to their first success with Toy Story 3. The movie begins withAndy leaving for college and donating his beloved toys -- includingWoody (Tom Hanks) and Buzz (Tim Allen) -- to a daycare. While the crewmeets new friends, including Ken (Michael Keaton), they soon grow tohate their new surroundings and plan an escape. The film was directedby Lee Unkrich from a script co-authored by Little Miss Sunshinescribe Michael Arndt. ~ Perry Seibert,Rovi",
"posters": {
"thumbnail": "http://content6.flixster.com/movie/11/13/43/11134356_mob.jpg",
"profile": "http://content6.flixster.com/movie/11/13/43/11134356_pro.jpg",
"detailed": "http://content6.flixster.com/movie/11/13/43/11134356_det.jpg",
"original": "http://content6.flixster.com/movie/11/13/43/11134356_ori.jpg"
},
"abridged_cast": [
{
"name": "TomHanks",
"id": "162655641",
"characters": [
"Woody"
]
},
{
"name": "TimAllen",
"id": "162655909",
"characters": [
"Buzz Lightyear"
]
},
{
"name": "JoanCusack",
"id": "162655020",
"characters": [
"Jessie theCowgirl"
]
},
{
"name": "NedBeatty",
"id": "162672460",
"characters": [
"Lots-o'-Huggin'Bear",
"Lotso"
]
},
{
"name": "DonRickles",
"id": "341817905",
"characters": [
"Mr. PotatoHead"
]
}
],
"alternate_ids": {
"imdb": "0435761"
},
"links": {
"self": "http://api.rottentomatoes.com/api/public/v1.0/movies/770672122.json",
"alternate": "http://www.rottentomatoes.com/m/toy_story_3/",
"cast": "http://api.rottentomatoes.com/api/public/v1.0/movies/770672122/cast.json",
"clips": "http://api.rottentomatoes.com/api/public/v1.0/movies/770672122/clips.json",
"reviews": "http://api.rottentomatoes.com/api/public/v1.0/movies/770672122/reviews.json",
"similar": "http://api.rottentomatoes.com/api/public/v1.0/movies/770672122/similar.json"
}
},
{
"id": "9414",
"title": "ToyStory2",
"year": 1999,
"mpaa_rating": "G",
"runtime": 92,
"critics_consensus": "ToyStory 2 employs inventive storytelling, gorgeous animation, and a topnotch voice cast to deliver another rich moviegoing experience for allages, one that's arguably even better than itspredecessor.",
"release_dates": {
"theater": "1999-11-24",
"dvd": "2000-10-17"
},
"ratings": {
"critics_rating": "CertifiedFresh",
"critics_score": 100,
"audience_rating": "Upright",
"audience_score": 72
},
"synopsis": "",
"posters": {
"thumbnail": "http://content6.flixster.com/movie/10/93/63/10936392_mob.jpg",
"profile": "http://content6.flixster.com/movie/10/93/63/10936392_pro.jpg",
"detailed": "http://content6.flixster.com/movie/10/93/63/10936392_det.jpg",
"original": "http://content6.flixster.com/movie/10/93/63/10936392_ori.jpg"
},
"abridged_cast": [
{
"name": "TomHanks",
"id": "162655641",
"characters": [
"Woody"
]
},
{
"name": "TimAllen",
"id": "162655909",
"characters": [
"Buzz Lightyear"
]
},
{
"name": "JoanCusack",
"id": "162655020",
"characters": [
"Jessie theCowgirl"
]
},
{
"name": "KelseyGrammer",
"id": "162660300",
"characters": [
"Stinky Pete theProspector"
]
},
{
"name": "DonRickles",
"id": "341817905",
"characters": [
"Mr. PotatoHead"
]
}
],
"alternate_ids": {
"imdb": "0120363"
},
"links": {
"self": "http://api.rottentomatoes.com/api/public/v1.0/movies/9414.json",
"alternate": "http://www.rottentomatoes.com/m/toy_story_2/",
"cast": "http://api.rottentomatoes.com/api/public/v1.0/movies/9414/cast.json",
"clips": "http://api.rottentomatoes.com/api/public/v1.0/movies/9414/clips.json",
"reviews": "http://api.rottentomatoes.com/api/public/v1.0/movies/9414/reviews.json",
"similar": "http://api.rottentomatoes.com/api/public/v1.0/movies/9414/similar.json"
}
},
{
"id": "9559",
"title": "ToyStory",
"year": 1995,
"mpaa_rating": "G",
"runtime": 80,
"critics_consensus": "Asentertaining as it is innovative, Toy Story kicked off Pixar'sunprecedented run of quality pictures, reinvigorating animated film intheprocess.",
"release_dates": {
"theater": "1995-11-22",
"dvd": "2001-03-20"
},
"ratings": {
"critics_rating": "CertifiedFresh",
"critics_score": 100,
"audience_rating": "Upright",
"audience_score": 81
},
"synopsis": "",
"posters": {
"thumbnail": "http://content7.flixster.com/movie/10/93/63/10936393_mob.jpg",
"profile": "http://content7.flixster.com/movie/10/93/63/10936393_pro.jpg",
"detailed": "http://content7.flixster.com/movie/10/93/63/10936393_det.jpg",
"original": "http://content7.flixster.com/movie/10/93/63/10936393_ori.jpg"
},
"abridged_cast": [
{
"name": "TomHanks",
"id": "162655641",
"characters": [
"Woody"
]
},
{
"name": "TimAllen",
"id": "162655909",
"characters": [
"Buzz Lightyear"
]
},
{
"name": "DonRickles",
"id": "341817905",
"characters": [
"Mr. PotatoHead"
]
},
{
"name": "Jim Varney",
"id": "162662792",
"characters": [
"SlinkyDog"
]
},
{
"name": "WallaceShawn",
"id": "162671862",
"characters": [
"Rex"
]
}
],
"alternate_ids": {
"imdb": "0114709"
},
"links": {
"self": "http://api.rottentomatoes.com/api/public/v1.0/movies/9559.json",
"alternate": "http://www.rottentomatoes.com/m/toy_story/",
"cast": "http://api.rottentomatoes.com/api/public/v1.0/movies/9559/cast.json",
"clips": "http://api.rottentomatoes.com/api/public/v1.0/movies/9559/clips.json",
"reviews": "http://api.rottentomatoes.com/api/public/v1.0/movies/9559/reviews.json",
"similar": "http://api.rottentomatoes.com/api/public/v1.0/movies/9559/similar.json"
}
}
],
"links": {
"self": "http://api.rottentomatoes.com/api/public/v1.0/movies.json?q=toy+story&page_limit=3&page=1",
"next": "http://api.rottentomatoes.com/api/public/v1.0/movies.json?q=toy+story&page_limit=3&page=2"
},
"link_template": "http://api.rottentomatoes.com/api/public/v1.0/movies.json?q={search-term}&page_limit={results-per-page}&page={page-number}"
}
First you need to create classes to receive the JSON data:
Public Class ReleaseDates
Public Property theater As String
Public Property dvd As String
End Class
Public Class Ratings
Public Property critics_rating As String
Public Property critics_score As Integer
Public Property audience_rating As String
Public Property audience_score As Integer
End Class
Public Class Posters
Public Property thumbnail As String
Public Property profile As String
Public Property detailed As String
Public Property original As String
End Class
Public Class AbridgedCast
Public Property name As String
Public Property id As String
Public Property characters As List(Of String)
End Class
Public Class AlternateIds
Public Property imdb As String
End Class
Public Class Links
Public Property self As String
Public Property alternate As String
Public Property cast As String
Public Property clips As String
Public Property reviews As String
Public Property similar As String
End Class
Public Class Movie
Public Property id As String
Public Property title As String
Public Property year As Integer
Public Property mpaa_rating As String
Public Property runtime As Integer
Public Property critics_consensus As String
Public Property release_dates As ReleaseDates
Public Property ratings As Ratings
Public Property synopsis As String
Public Property posters As Posters
Public Property abridged_cast As List(Of AbridgedCast)
Public Property alternate_ids As AlternateIds
Public Property links As Links
End Class
Public Class Links2
Public Property self As String
<JsonProperty(PropertyName:="next")>
Public Property nextItem As String
End Class
Public Class RootObject
Public Property total As Integer
Public Property movies As List(Of Movie)
Public Property links As Links2
Public Property link_template As String
End Class
Once you have done that, you can simply call JsonConvert.DeserializeObject to deserialize your JSON data:
Sub Main()
Dim json As String
json = "{""total"":7,""movies"":[{""id"":""770672122"",""title"":""Toy Story 3"",""year"":2010,""mpaa_rating"":""G"",""runtime"":103,""critics_consensus"":""Deftly blending comedy, adventure, and honest emotion, Toy Story 3 is a rare second sequel that really works."",""release_dates"":{""theater"":""2010-06-18"",""dvd"":""2010-11-02""},""ratings"":{""critics_rating"":""Certified Fresh"",""critics_score"":99,""audience_rating"":""Upright"",""audience_score"":91},""synopsis"":""Pixar returns to their first success with Toy Story 3. The movie begins with Andy leaving for college and donating his beloved toys -- including Woody (Tom Hanks) and Buzz (Tim Allen) -- to a daycare. While the crew meets new friends, including Ken (Michael Keaton), they soon grow to hate their new surroundings and plan an escape. The film was directed by Lee Unkrich from a script co-authored by Little Miss Sunshine scribe Michael Arndt. ~ Perry Seibert, Rovi"",""posters"":{""thumbnail"":""http://content6.flixster.com/movie/11/13/43/11134356_mob.jpg"",""profile"":""http://content6.flixster.com/movie/11/13/43/11134356_pro.jpg"",""detailed"":""http://content6.flixster.com/movie/11/13/43/11134356_det.jpg"",""original"":""http://content6.flixster.com/movie/11/13/43/11134356_ori.jpg""},""abridged_cast"":[{""name"":""Tom Hanks"",""id"":""162655641"",""characters"":[""Woody""]},{""name"":""Tim Allen"",""id"":""162655909"",""characters"":[""Buzz Lightyear""]},{""name"":""Joan Cusack"",""id"":""162655020"",""characters"":[""Jessie the Cowgirl""]},{""name"":""Ned Beatty"",""id"":""162672460"",""characters"":[""Lots-o'-Huggin' Bear"",""Lotso""]},{""name"":""Don Rickles"",""id"":""341817905"",""characters"":[""Mr. Potato Head""]}],""alternate_ids"":{""imdb"":""0435761""},""links"":{""self"":""http://api.rottentomatoes.com/api/public/v1.0/movies/770672122.json"",""alternate"":""http://www.rottentomatoes.com/m/toy_story_3/"",""cast"":""http://api.rottentomatoes.com/api/public/v1.0/movies/770672122/cast.json"",""clips"":""http://api.rottentomatoes.com/api/public/v1.0/movies/770672122/clips.json"",""reviews"":""http://api.rottentomatoes.com/api/public/v1.0/movies/770672122/reviews.json"",""similar"":""http://api.rottentomatoes.com/api/public/v1.0/movies/770672122/similar.json""}},{""id"":""9414"",""title"":""Toy Story 2"",""year"":1999,""mpaa_rating"":""G"",""runtime"":92,""critics_consensus"":""Toy Story 2 employs inventive storytelling, gorgeous animation, and a top notch voice cast to deliver another rich moviegoing experience for all ages, one that's arguably even better than its predecessor."",""release_dates"":{""theater"":""1999-11-24"",""dvd"":""2000-10-17""},""ratings"":{""critics_rating"":""Certified Fresh"",""critics_score"":100,""audience_rating"":""Upright"",""audience_score"":72},""synopsis"":"""",""posters"":{""thumbnail"":""http://content6.flixster.com/movie/10/93/63/10936392_mob.jpg"",""profile"":""http://content6.flixster.com/movie/10/93/63/10936392_pro.jpg"",""detailed"":""http://content6.flixster.com/movie/10/93/63/10936392_det.jpg"",""original"":""http://content6.flixster.com/movie/10/93/63/10936392_ori.jpg""},""abridged_cast"":[{""name"":""Tom Hanks"",""id"":""162655641"",""characters"":[""Woody""]},{""name"":""Tim Allen"",""id"":""162655909"",""characters"":[""Buzz Lightyear""]},{""name"":""Joan Cusack"",""id"":""162655020"",""characters"":[""Jessie the Cowgirl""]},{""name"":""Kelsey Grammer"",""id"":""162660300"",""characters"":[""Stinky Pete the Prospector""]},{""name"":""Don Rickles"",""id"":""341817905"",""characters"":[""Mr. Potato Head""]}],""alternate_ids"":{""imdb"":""0120363""},""links"":{""self"":""http://api.rottentomatoes.com/api/public/v1.0/movies/9414.json"",""alternate"":""http://www.rottentomatoes.com/m/toy_story_2/"",""cast"":""http://api.rottentomatoes.com/api/public/v1.0/movies/9414/cast.json"",""clips"":""http://api.rottentomatoes.com/api/public/v1.0/movies/9414/clips.json"",""reviews"":""http://api.rottentomatoes.com/api/public/v1.0/movies/9414/reviews.json"",""similar"":""http://api.rottentomatoes.com/api/public/v1.0/movies/9414/similar.json""}},{""id"":""9559"",""title"":""Toy Story"",""year"":1995,""mpaa_rating"":""G"",""runtime"":80,""critics_consensus"":""As entertaining as it is innovative, Toy Story kicked off Pixar's unprecedented run of quality pictures, reinvigorating animated film in the process."",""release_dates"":{""theater"":""1995-11-22"",""dvd"":""2001-03-20""},""ratings"":{""critics_rating"":""Certified Fresh"",""critics_score"":100,""audience_rating"":""Upright"",""audience_score"":81},""synopsis"":"""",""posters"":{""thumbnail"":""http://content7.flixster.com/movie/10/93/63/10936393_mob.jpg"",""profile"":""http://content7.flixster.com/movie/10/93/63/10936393_pro.jpg"",""detailed"":""http://content7.flixster.com/movie/10/93/63/10936393_det.jpg"",""original"":""http://content7.flixster.com/movie/10/93/63/10936393_ori.jpg""},""abridged_cast"":[{""name"":""Tom Hanks"",""id"":""162655641"",""characters"":[""Woody""]},{""name"":""Tim Allen"",""id"":""162655909"",""characters"":[""Buzz Lightyear""]},{""name"":""Don Rickles"",""id"":""341817905"",""characters"":[""Mr. Potato Head""]},{""name"":""Jim Varney"",""id"":""162662792"",""characters"":[""Slinky Dog""]},{""name"":""Wallace Shawn"",""id"":""162671862"",""characters"":[""Rex""]}],""alternate_ids"":{""imdb"":""0114709""},""links"":{""self"":""http://api.rottentomatoes.com/api/public/v1.0/movies/9559.json"",""alternate"":""http://www.rottentomatoes.com/m/toy_story/"",""cast"":""http://api.rottentomatoes.com/api/public/v1.0/movies/9559/cast.json"",""clips"":""http://api.rottentomatoes.com/api/public/v1.0/movies/9559/clips.json"",""reviews"":""http://api.rottentomatoes.com/api/public/v1.0/movies/9559/reviews.json"",""similar"":""http://api.rottentomatoes.com/api/public/v1.0/movies/9559/similar.json""}}],""links"":{""self"":""http://api.rottentomatoes.com/api/public/v1.0/movies.json?q=toy+story&page_limit=3&page=1"",""next"":""http://api.rottentomatoes.com/api/public/v1.0/movies.json?q=toy+story&page_limit=3&page=2""},""link_template"":""http://api.rottentomatoes.com/api/public/v1.0/movies.json?q={search-term}&page_limit={results-per-page}&page={page-number}""}"
Dim obj As RootObject
obj = JsonConvert.DeserializeObject(Of RootObject)(json)
End Sub

Parse a JSON to object JAVA without Root

The response of my service ALFRESCO REST is:
[
{
"role": "SiteManager",
"authority":
{
"authorityType": "USER",
"fullName": "admin",
"userName": "admin",
"firstName": "Administrator",
"lastName": "",
"url": "\/alfresco\/service\/api\/people\/admin"
},
"url": "\/alfresco\/service\/api\/sites\/test3\/memberships\/admin"
}
,
{
"role": "SiteConsumer",
"authority":
{
"authorityType": "GROUP",
"shortName": "jamalgg",
"fullName": "GROUP_jamalgg",
"displayName": "jamalgg",
"url": "\/alfresco\/service\/api\/groups\/jamalgg"
},
"url": "\/alfresco\/service\/api\/sites\/test3\/memberships\/GROUP_jamalgg"
}
,
{
"role": "SiteManager",
"authority":
{
"authorityType": "GROUP",
"shortName": "ALFRESCO_ADMINISTRATORS",
"fullName": "GROUP_ALFRESCO_ADMINISTRATORS",
"displayName": "ALFRESCO_ADMINISTRATORS",
"url": "\/alfresco\/service\/api\/groups\/ALFRESCO_ADMINISTRATORS"
},
"url": "\/alfresco\/service\/api\/sites\/test3\/memberships\/GROUP_ALFRESCO_ADMINISTRATORS"
}
]
And I want to parse to list of object:
List<Memberships > listMemberships;
public class Memberships {
private String role;
private List<Authority> listAuthority ;
private String url;
}
public class Authority {
private String authorityType;
private String shortName;
private String fullName;
private String displayName;
private String url;
}
I think that there are two solutions:
how to add the tag Memberships to JSON result for encapsulates
the whole.
how to parse JSON result directly to my list
Thanks
As answered in a-better-java-json-library I would use the google-gson library.
Thank you Ozoli. The answer to my question is:
Type targetType = new TypeToken<Collection<Memberships>>() {}.getType();
List<Memberships> list = (List<Memberships>) new Gson().fromJson(renduJson,targetType);
You can also use http://jsongen.byingtondesign.com/ to generate java code from json response and then use jackson library ( http://jackson.codehaus.org/ ) to bind that response data to your object(s):
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(new File("c:\\user.json"), User.class);
sorry for not formatting code
Type targetType = new TypeToken<Collection<Memberships>>() {}.getType();
List<Memberships> list = (List<Memberships>)new Gson().fromJson(rendu,targetType);