J'ai passé la plus grande partie de deux jours à "me moquer" des échantillons de code, etc., à essayer de lire un très gros fichier JSON dans un tableau en c # afin de pouvoir le diviser plus tard en un tableau 2D pour le traitement.
Le problème que je rencontrais était que je ne pouvais trouver aucun exemple de personnes faisant ce que j'essayais de faire. Cela signifiait que je modifiais juste un peu le code en espérant le meilleur.
J'ai réussi à faire fonctionner quelque chose qui:
- Lisez le fichier Manquez les en-têtes et ne lisez que les valeurs dans le tableau.
- Placez une certaine quantité de valeurs sur chaque ligne d'un tableau. (Donc, je pourrais plus tard le diviser en un tableau 2D)
Cela a été fait avec le code ci-dessous mais il plante le programme après avoir entré quelques lignes dans le tableau. Cela peut être lié à la taille du fichier.
// If the file extension was a jave file the following
// load method will be use else it will move on to the
// next else if statement
if (fileExtension == ".json")
{
int count = 0;
int count2 = 0;
int inOrOut = 0;
int nRecords=1;
JsonTextReader reader = new JsonTextReader(new StreamReader(txtLoaction.Text));
string[] rawData = new string[5];
while (reader.Read())
{
if (reader.Value != null)
if (inOrOut == 1)
{
if (count == 6)
{
nRecords++;
Array.Resize(ref rawData, nRecords);
//textBox1.Text += "\r\n";
count = 0;
}
rawData[count2] += reader.Value + ","; //+"\r\n"
inOrOut = 0;
count++;
if (count2 == 500)
{
MessageBox.Show(rawData[499]);
}
}
else
{
inOrOut = 1;
}
}
}
Un extrait du JSON avec lequel je travaille est:
[
{ "millis": "1000",
"stamp": "1273010254",
"datetime": "2010/5/4 21:57:34",
"light": "333",
"temp": "78.32",
"vcc": "3.54" },
]
J'ai besoin des valeurs de ce JSON. Par exemple, j'ai besoin de "3.54", mais je ne voudrais pas qu'il imprime le "vcc".
J'espère que quelqu'un peut me montrer comment lire un fichier JSON et extraire uniquement les données dont j'ai besoin et les placer dans un tableau ou quelque chose que je peux utiliser pour les mettre plus tard dans un tableau.
la source
Réponses:
Que diriez-vous de rendre toutes les choses plus faciles avec Json.NET ?
Vous pouvez même obtenir les valeurs
dynamic
alliées sans déclarer deItem
classe.la source
json
. Il doit s'agir du contenu de votre fichier.StreamReader
toute façon, il serait préférable de désérialiser directement à partir du flux en utilisantJsonTextReader
comme indiqué dans Can Json.NET sérialiser / désérialiser vers / à partir d'un flux? . Cer.ReadToEnd()
n'est pas nécessaire.Faire cela vous-même est une terrible idée. Utilisez Json.NET . Il a déjà résolu le problème mieux que la plupart des programmeurs ne pouvaient le faire si on leur donnait des mois pour travailler dessus. Quant à vos besoins spécifiques, l'analyse en tableaux et autres, consultez la documentation , en particulier sur
JsonTextReader
. Fondamentalement, Json.NET gère les tableaux JSON de manière native et les analysera en chaînes, en entiers ou quel que soit le type sans qu'il vous soit demandé. Voici un lien direct vers les utilisations de code de base pour le lecteur et l'écrivain, afin que vous puissiez l'ouvrir dans une fenêtre de rechange pendant que vous apprenez à travailler avec cela.C'est pour le mieux: soyez paresseux cette fois et utilisez une bibliothèque pour résoudre ce problème commun pour toujours.
la source
Basé sur la solution de @ LB, le code (tapé
Object
plutôt queAnonymous
) VB estJe dois mentionner que cela est rapide et utile pour construire du contenu d'appel HTTP où le type n'est pas requis. Et utiliser
Object
plutôt queAnonymous
signifie que vous pouvez maintenirOption Strict On
dans votre environnement Visual Studio - je déteste désactiver cela.la source
la source
Pour trouver le bon chemin que j'utilise
Voir https://stackoverflow.com/a/32071002/4420355
la source
Pour toute analyse JSON, utilisez le site Web http://json2csharp.com/ (le plus simple) pour convertir votre JSON en classe C # pour désérialiser votre JSON en objet C #.
Utilisez ensuite JavaScriptSerializer (de System.Web.Script.Serialization), au cas où vous ne voudriez pas de DLL tierce comme newtonsoft.
Ensuite, vous pouvez obtenir votre objet avec Items.name ou Items.Url etc.
la source
Cela peut également être fait de la manière suivante:
la source