2017-04-20 19 views
1

データを追加し続けるにはどうすればよいですか?たとえば、C#のjsonファイルにデータを追加する

{ 
    "13232": [ 
    "2012952" 
    ] 
} 

、私はそれに別のオブジェクトを追加したい:

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); 

私は文字通り持っていない:

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

これは私が使用するコードがある 私はこれを持っていますどのようにそれを追加し続けるアイデアだが、他の誰かが持っているかもしれない?

+0

JSONから '' '' JArray'''にデシリアライズし、新しいデータをこの '' 'JArray'''に追加し、古いファイルを更新されたデータで上書きする必要があります。 –

答えて

3

ファイルアペンド操作を使用してこれを行うことはできません。ファイルの追加操作では、最後にテキストを追加するだけで、途中のある時点でテキストを挿入することはできません。これにより、file-appendを使用してJSONを有効に保つことができなくなります。

あなたは私が考えることができる二つの選択肢があります。

  1. 、オブジェクトにファイル全体を読んで、あなたのオブジェクトを追加し、ファイル全体(パフォーマンスの低下)を書き換える
  2. オープンファイルの読み込みを/私はあなたがNewtonsoftのJsを使用recommandその後、(些細なことではない)に近い中括弧を書き、その後、残りの データを書き込む、あなたは右中括弧に到達するまで を解析、
1

を書きますlibには、ナゲットパッケージとして利用できます。

モデルクラスを作成してjsonノードを表すことができます。次に、そのモデルにJsonを非直列化し、最後に新しい要素を含む配列を作成してjsonに再直列化します。 https://msdn.microsoft.com/en-us/library/bb412179(v=vs.110).aspx

編集:手順でActual NewtonSoft Documentation

:1 Deserialize the collection

2:それについては、このMSDNのページで

ルックアンドlistName.Add(クラス名)を使用して新しいクラスインスタンス。

3:Reserialize the collection

0

最も安全なアプローチは読み取り更新リライト(彼らは追加サポートしていないとしてJSONやXML形式に適用されます)。無効なJSONと一緒に暮らすことができるかどう

次のオプションは、フラグメントRead Multiple Fragments With JsonReader

これらのアプローチが動作しない場合を読み取るためにJsonReaderSupportMultipleContentを使用するよりも、単にあなたが持っているコードでJSONフラグメントを連結することですし、あなたのフォーマットが固​​定されています - ファイル内の最後の位置]を見つけ、そこでストリームを検索し、新しい配列要素を書き込んで、]}を追加します。

関連する問題