配列を持つ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としてデータを操作できるので、もっとやりやすいかもしれません。
以上。
このコメントは投稿者によって削除されました。
返信削除