Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Nested jsonarray in json string met jsonconvert deserializen

Pagina: 1
Acties:

  • marco282
  • Registratie: Februari 2011
  • Laatst online: 12-09 14:41
Beste mede tweakers,

NOTE: Betreft Visual Basic, vergeten in de titel te zetten. Mijn excuses hiervoor.

Een tijd terug heb ik een porgramma geschreven in autoit. Nu wil ik omdat ik een paar functionaliteiten mis het helemaal herschrijven in Visual basic, ik gebruik er visual studio 2013 voor (lang leve dreamspark).

Nu heb ik onder de knie gekregen hoe je met gebruik van jsonconvert van newtonsoft een json string om kan zetten in een object waar je doormiddel van bijv object.name.first de voornaam eruit kan halen. Werkt perfect.

Nu heb ik te maken met een JSON string waarin een JSON array bevind.

Dit gebruik ik voor een normale json string die dus alleen bestaat uit {} en geen []
Dim obj = JsonConvert.DeserializeObject(Of Rootobject)(json)
Dit werkt helemaal prima, maar als ik dat gebruik op de json van :
https://api.twitch.tv/api/videos/a579793742 (om maar ff een voorbeeld te geven).

Krijg ik de foutmelding:
Additional information: Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'WindowsApplication1.Live' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.

Ik begrijp dat ik ergens (Of list) moet gebruiken, maar die kan ik niet op de Rootobject doen omdat deze zelf geen array is, de object Live is een json array en de rest zijn gewoon normale objecten.

Zou er iemand hier zijn die vriendelijk genoeg is om mij de goeie kant op te sturen? Of aan te raden een andere methode te gebruiken ipv JsonConvert.


Met vriendelijke groet,

Marco


PS: De classes die ik heb laten genereren door visual studio:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Public Class Rootobject2
    Public Property api_id As String
    Public Property start_offset As Integer
    Public Property end_offset As Integer
    Public Property play_offset As Integer
    Public Property increment_view_count_url As String
    Public Property path As String
    Public Property duration As Integer
    Public Property broadcaster_software As String
    Public Property channel As String
    Public Property chunks As Chunks
    Public Property restrictions As Restrictions
    Public Property preview_small As String
    Public Property preview As String
    Public Property vod_ad_frequency As String
    Public Property vod_ad_length As String
    Public Property muted_segments As Object
End Class

Public Class Chunks
    Public Property live() As Live
End Class

Public Class Live
    Public Property url As String
    Public Property length As Integer
    Public Property vod_count_url As String
    Public Property upkeep As String
End Class

Public Class Restrictions
End Class

[ Voor 28% gewijzigd door marco282 op 19-10-2014 19:23 ]

3X Multiplus II 10KVA, 2x MPPT RS 450/200, 48v 82kWh LiFePO4, 21kwp PV


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 23:25

Creepy

Tactical Espionage Splatterer

De fout geeft aan dat er een array is, maar dat niet naar Live omgezet kan worden. Live gebruik je alleen in Chunks. Dat lijkt erop te duiden dat Chunks een array van Live objecten moet bevatten.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • marco282
  • Registratie: Februari 2011
  • Laatst online: 12-09 14:41
Creepy schreef op zondag 19 oktober 2014 @ 19:46:
De fout geeft aan dat er een array is, maar dat niet naar Live omgezet kan worden. Live gebruik je alleen in Chunks. Dat lijkt erop te duiden dat Chunks een array van Live objecten moet bevatten.
Bedankt voor de reactie,

Punt is dat ik eigenlijk alleen interesse heb in de gegevens van Live, en dan met name de URL.
Uiteindelijk wil ik dus een array hebben waarmee ik kan doen

Visual Basic:
1
2
3
For Each url As String In urls
 'downloadscript hier'
Next


Hoe kan ik dus het beste de json data omzetten naar een array, ik begrijp hoe de json in elkaar zit, maar ik begrijp niet hoe ik het om kan zetten naar een array in visual basic.

3X Multiplus II 10KVA, 2x MPPT RS 450/200, 48v 82kWh LiFePO4, 21kwp PV


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 23:25

Creepy

Tactical Espionage Splatterer

Als je je "live" property goed definieert, dan zet je JSON library de boel voor je om. Dus zorgt er nu eerst voor dat je "live" property een array van Live objecten is, en dan zou het al goed moeten gaan. Het lijkt me dat je zelf weet hoe je een array moet definieren, of dat je dat anders met een google actie van 5 seconden even opzoekt ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • marco282
  • Registratie: Februari 2011
  • Laatst online: 12-09 14:41
Dit word toch in de classes gedaan?

Public Class Chunks
Public Property live() As Live

End Class

Daar is toch uit bekent dat live een aray is van de objecten uit Live, dus onder andere de URL.
Ik begrijp dus niet wat er fout is met de live property en hoe ik hem dus zou moeten aanpassen.

Nu moet ik zeggen dat ik gister pas voor het eerst ooit een stuk Visual basic code gezien heb en dus ook niet goed bekent er mee ben. Ik snap wel hoe je gewoon een nieuwe array aan maakt:
dim array() = {"key0","key1"} die je dan kan accessen als array(0) en array(1).
Maar ik begrijp niet hoe dit toepasselijk is op de deserialize code.

Vorige ervaringen met code = php en autoit
Maar ook in autoit werkte ik niet veel met arrays, in php daarintegen juist wel. Dus ik snap het concept wel. Denk ik althans

3X Multiplus II 10KVA, 2x MPPT RS 450/200, 48v 82kWh LiFePO4, 21kwp PV


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 23:25

Creepy

Tactical Espionage Splatterer

Anders google ik zelf even die gare VB syntax 8)7
Ja, wat je hebt staan zou zo moeten kloppen ja.

Ik kom met google (alweer ja ;) ) iets tegen als "Public MyList() As List(Of String)". Heb je die syntax al geprobeerd?

[ Voor 38% gewijzigd door Creepy op 19-10-2014 22:43 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1