Comment continuer à ajouter des données? J'ai ceci:

{
  "13232": [
    "2012952"
  ]
}

Et je veux y ajouter un autre objet, exemple:

{
  "13232": [
    "2012952"
  ],
  "19213": [
    "2016086"
  ]
}

Voici le code que j'utilise:

JArray array = new JArray();
array.Add(Itemid);

JObject o = new JObject();
o[Userid] = array;

string json = o.ToString(Formatting.Indented);
//i know this keeps appending text but how would i append it inside the { and }?
File.AppendAllText("E:/media.json", json);

Je n'ai littéralement aucune idée de comment continuer à l'ajouter, mais peut-être que quelqu'un d'autre l'a fait?

5
datboi 20 avril 2017 à 23:32

3 réponses

Meilleure réponse

Vous ne pourrez pas utiliser les opérations d'ajout de fichiers pour ce faire. Les opérations d'ajout de fichier ne peuvent ajouter du texte qu'à la fin, elles ne peuvent pas insérer de texte à un moment donné au milieu. Cela rend impossible l'utilisation de file-append pour garder le JSON valide.

Vous avez deux choix auxquels je peux penser:

  1. Lisez le fichier entier dans un objet, ajoutez votre objet, puis réécrivez le fichier entier (performances médiocres)
  2. Ouvrez le fichier en lecture / écriture, analysez jusqu'à ce que vous arriviez à l'accolade fermante, puis écrivez les données restantes, puis écrivez l'accolade fermante (pas trivial)
6
Tim 20 avril 2017 à 20:40

Je vous recommande d'utiliser Newtonsoft Json lib, disponible sous forme de package nuget.

Vous pouvez créer une classe de modèle pour représenter l'un des noeuds json, puis désérialiser votre Json vers ce modèle et créer un tableau contenant le nouvel élément à la fin pour le re-sérialiser en json après.

Regardez cette page MSDN à ce sujet: https: / /msdn.microsoft.com/en-us/library/bb412179(v=vs.110).aspx

Modifier: Documentation NewtonSoft actuelle

Par étapes: 1 Désérialiser la collection

2: Et une nouvelle instance de classe avec listName.Add (className);

3: Resérialiser la collection

1
Lorien 20 avril 2017 à 20:50

L'approche la plus sûre est read-update-rewrite (s'applique aux formats JSON et XML car ils ne prennent pas en charge l'ajout).

L'option suivante si vous pouvez vivre avec un JSON invalide est simplement de concaténer des fragments JSON avec le code que vous avez et d'utiliser SupportMultipleContent dans JsonReader pour lire des fragments Lire plusieurs fragments avec JsonReader

Si ces approches ne fonctionnent pas et que votre format est fixe - trouvez la position du dernier ] dans le fichier, recherchez le flux là-bas et écrivez de nouveaux éléments de tableau et ajoutez ]}.

1
Alexei Levenkov 20 avril 2017 à 20:41