JSON.NETのJArrayを使って配列データを操作する


配列を持つJSONを読み込んで、配列の数を一つ増やしてJSONに戻す処理をJarrayクラスを使ってやってみようと思います。

読み込むJSONは以下のようなデータとします。
{
  "Group": [
    {"UserName": "A","Age": "24"},
    {"UserName": "B","Age": "40"},
    {"UserName": "C","Age": "18"}
  ]
}


このJSONを読み込んで、配列に1行追加してから元のファイルに出力するプログラムです。
Imports System.IO
Imports System.Text.Encoding
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq

Module Module1
    Sub Main()
        ''JSON読み込み用
        Dim jText As String = String.Empty
        ''ファイルからJSONを読み込む
        Using reader As New StreamReader("test.json", GetEncoding("utf-8"))
            jText = reader.ReadToEnd
        End Using
        ''文字列をJSONにデシリアライズ
        Dim jObj As Object = JsonConvert.DeserializeObject(jText)

        ''JSONから配列を取得
        Dim jArr As JArray = jObj("Group")
        ''配列操作用JObject
        Dim jTemp As JObject
        ''JSONから配列を複製する
        jTemp = jArr.First.DeepClone
        jTemp("UserName") = "Z"
        jTemp("Age") = "88"
        ''複製した配列をJSONに追加
        jArr.Add(jTemp)

        ''JSONにシリアライズする
        jText = JsonConvert.SerializeObject(jObj, Formatting.Indented)

        ''元のファイルに出力する
        Using writer = New StreamWriter("test.json", True, GetEncoding("utf-8"))
            writer.WriteLine(jText)
        End Using
    End Sub
End Module

実行結果は以下のようになります。
{
  "Group": [
    {
      "UserName": "A",
      "Age": "24"
    },
    {
      "UserName": "B",
      "Age": "40"
    },
    {
      "UserName": "C",
      "Age": "18"
    },
    {
      "UserName": "Z",
      "Age": "88"
    }
  ]
}


JTokenクラスのDeepCloneメソッドを使うと、配列の行を複製できるので便利です。
上記以外のやり方として、ToListメソッドを使えばListとしてデータを操作できるので、もっとやりやすいかもしれません。

以上。


<スポンサーリンク>


1 件のコメント :