配列を持つJSONを読み込んで、配列の数を一つ増やしてJSONに戻す処理をJarrayクラスを使ってやってみようと思います。
読み込むJSONは以下のようなデータとします。
{
"Group": [
{"UserName": "A","Age": "24"},
{"UserName": "B","Age": "40"},
{"UserName": "C","Age": "18"}
]
}
"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"
}
]
}
"Group": [
{
"UserName": "A",
"Age": "24"
},
{
"UserName": "B",
"Age": "40"
},
{
"UserName": "C",
"Age": "18"
},
{
"UserName": "Z",
"Age": "88"
}
]
}
JTokenクラスのDeepCloneメソッドを使うと、配列の行を複製できるので便利です。
上記以外のやり方として、ToListメソッドを使えばListとしてデータを操作できるので、もっとやりやすいかもしれません。
以上。

このコメントは投稿者によって削除されました。
返信削除