2013-09-26 2 views
1

Je viens d'apprendre les bases de VB 2010, et j'essaye de concevoir un programme pour maintenir une base de données. J'ai une chaîne JSON dans la base de données qui contient une liste de fichiers d'image et leurs numéros d'identification pertinents. Ceci est dans JSON car un site utilise également ces données. Le code exemple estDécoder JSON dans Visual Basic 2010 Express

[{"ID": 0, "Path": "Image0.jpg"},{"ID": 1, "Path": "Image1.jpg"}, {"ID": 2, "Path": "Image2.jpg"},{"ID": 3, "Path": "Image3.jpg"}] 

J'ai essayé d'utiliser JSON.NET, mais je suis un novice et ne sais pas pourquoi il ne fonctionne pas.

Je souhaite qu'il y ait un moyen que je puisse retourner les fichiers d'image, par exemple dans php $DecodedArray[0] fonctionnerait, je suis à la recherche d'un moyen de répliquer cela dans Visual Basic.

Imports System.Web.Script.Serialization 
Module Module1 

Public Class Target 
    Public ID, Image As String 
End Class 

Sub Main() 
    Console.Clear() 
    Dim ser As New JavaScriptSerializer() 
    Dim input As String = My.Computer.FileSystem.ReadAllText("JSONFile.txt") 
    '[{"ID": 0, "Path": "Image0.jpg"},{"ID": 1, "Path": "Image1.jpg"}, {"ID": 2, "Path": "Image2.jpg"},{"ID": 3, "Path": "Image3.jpg"}] 
    Console.WriteLine(input) 
    Console.WriteLine() 
    Dim output As Target = ser.Deserialize(Of Target)(input) 
    Console.Write(output.ID.0) 
    Console.ReadKey() 
End Sub 

End Module 

Avec ce code, je voudrais que la sortie soit Image0.jpg

Remarque, je ne peux pas mettre à jour à partir de Visual Basic 2010 Express

+2

Alors ... pourquoi est-ce marqué PHP? –

+0

pourquoi dites-vous json.net a échoué? –

+0

@ DanielA.White Il a échoué plusieurs fois, avec mes tentatives multiples. Il s'agit généralement d'une erreur de conversion de sorte qu'il ne peut pas accéder à la valeur enfant –

Répondre

3

Parce que votre JSON a des touches numériques au lieu des touches attendues, il serait difficile de définir un type personnalisé pour le faire correspondre. Je crois que votre meilleur pari est de désérialiser dans un Dictionary(Of String, String) - ceci se désérialisera correctement, et vous pouvez lire le dictionnaire pour obtenir vos articles.

Alors:

Dim output = ser.Deserialize(Of Dictionary(Of String, String))(input) 
For Each key As String In output.Keys 
    Console.WriteLine("{0}: {1}", key, output(key)) 
Next 

Normalement, lorsque vous définissez un type régulier, vous devriez connaître les noms des propriétés JSON. Compte tenu de votre classe Target, votre JSON serait effectivement ressembler à:

[ 
    { "ID":"0", "Image":"Image0.jpg" }, 
    { "ID":"1", "Image":"Image1.jpg" }, 
    { "ID":"2", "Image":"Image2.jpg" } 
] 

Et il désérialiser dans un tableau d'objets cibles, plutôt qu'un seul. Mais si vous êtes coincé avec le JSON que vous avez, le Dictionary est le chemin à parcourir.

Si vous pouvez utiliser le nettoyeur JSON à partir d'ici, votre code est à peu près correct. Vous désérialisez simplement dans un tableau et vous pouvez accéder aux éléments de ce tableau. Donc:

Dim output = ser.Deserialize(Of Target())(input) 
For i As Integer = 0 To output.GetUpperBound(0) 
    Console.WriteLine("{0}: {1}", output(i).ID, output(i).Image) 
Next 
+0

Quel code puis-je utiliser si je devais utiliser le nettoyeur JSON? Je peux changer le code du site pour utiliser le nouveau format. –

+0

@JoshLukeBlease Edité avec ce que vous devez changer. –

Questions connexes