この記事の内容
この記事では、.NET CoreのConsole Applicationで、jsonファイルの内容を別のjsonファイルの内容に追加する方法を紹介します。要素の追加にJSON Path(XPathのようなもの)を使って、追加先のオブジェクトを指定したりします。
使用するjsonファイル
以下のfrom.jsonとto.jsonを使用します。
from.json
{ "pokemon": [ { "no": 1, "name": "フシギダネ", "form": "", "isMegaEvolution": false, "evolutions": [ 2 ], "types": [ "くさ", "どく" ], "abilities": [ "しんりょく" ], "hiddenAbilities": [ "ようりょくそ" ], "stats": { "hp": 45, "attack": 49, "defence": 49, "spAttack": 65, "spDefence": 65, "speed": 45 } }, { "no": 2, "name": "フシギソウ", "form": "", "isMegaEvolution": false, "evolutions": [ 3 ], "types": [ "くさ", "どく" ], "abilities": [ "しんりょく" ], "hiddenAbilities": [ "ようりょくそ" ], "stats": { "hp": 60, "attack": 62, "defence": 63, "spAttack": 80, "spDefence": 80, "speed": 60 } }, { "no": 3, "name": "フシギバナ", "form": "", "isMegaEvolution": false, "evolutions": [], "types": [ "くさ", "どく" ], "abilities": [ "しんりょく" ], "hiddenAbilities": [ "ようりょくそ" ], "stats": { "hp": 80, "attack": 82, "defence": 83, "spAttack": 100, "spDefence": 100, "speed": 80 } } ] }
to.json
{ "pokemon": [ { "no": 152, "name": "チコリータ", "form": "", "isMegaEvolution": false, "evolutions": [ 153 ], "types": [ "くさ" ], "abilities": [ "しんりょく" ], "hiddenAbilities": [ "リーフガード" ], "stats": { "hp": 45, "attack": 49, "defence": 65, "spAttack": 49, "spDefence": 65, "speed": 45 } }, { "no": 153, "name": "ベイリーフ", "form": "", "isMegaEvolution": false, "evolutions": [ 154 ], "types": [ "くさ" ], "abilities": [ "しんりょく" ], "hiddenAbilities": [ "リーフガード" ], "stats": { "hp": 60, "attack": 62, "defence": 80, "spAttack": 63, "spDefence": 80, "speed": 60 } }, { "no": 154, "name": "メガニウム", "form": "", "isMegaEvolution": false, "evolutions": [], "types": [ "くさ" ], "abilities": [ "しんりょく" ], "hiddenAbilities": [ "リーフガード" ], "stats": { "hp": 80, "attack": 82, "defence": 100, "spAttack": 83, "spDefence": 100, "speed": 80 } } ] }
事前準備
JSONを扱うためNuGetにて、Newtonsoft.Jsonをインストールしてください。
from.jsonの内容をto.jsonに追加する その1
from.jsonの内容を”old_pokemon”として追記します。
ソースコードは以下の通りです。
using Newtonsoft.Json.Linq; using System; using System.IO; namespace ConsoleApp { class Program { static void Main(string[] args) { string fromJson = File.ReadAllText("from.json"); JObject fromObject = JObject.Parse(fromJson); string toJson = File.ReadAllText("to.json"); JObject toObject = JObject.Parse(toJson); JToken fromPokemons = fromObject.SelectToken("$.pokemon"); JToken toPokemons = toObject.SelectToken("$.pokemon"); toPokemons.Parent.AddAfterSelf(new JProperty("old_pokemon", fromPokemons)); Console.WriteLine(toObject.ToString()); } } }
出力結果
{ "pokemon": [ { "no": 152, "name": "チコリータ", "form": "", "isMegaEvolution": false, "evolutions": [ 153 ], "types": [ "くさ" ], "abilities": [ "しんりょく" ], "hiddenAbilities": [ "リーフガード" ], "stats": { "hp": 45, "attack": 49, "defence": 65, "spAttack": 49, "spDefence": 65, "speed": 45 } }, { "no": 153, "name": "ベイリーフ", "form": "", "isMegaEvolution": false, "evolutions": [ 154 ], "types": [ "くさ" ], "abilities": [ "しんりょく" ], "hiddenAbilities": [ "リーフガード" ], "stats": { "hp": 60, "attack": 62, "defence": 80, "spAttack": 63, "spDefence": 80, "speed": 60 } }, { "no": 154, "name": "メガニウム", "form": "", "isMegaEvolution": false, "evolutions": [], "types": [ "くさ" ], "abilities": [ "しんりょく" ], "hiddenAbilities": [ "リーフガード" ], "stats": { "hp": 80, "attack": 82, "defence": 100, "spAttack": 83, "spDefence": 100, "speed": 80 } } ], "old_pokemon": [ { "no": 1, "name": "フシギダネ", "form": "", "isMegaEvolution": false, "evolutions": [ 2 ], "types": [ "くさ", "どく" ], "abilities": [ "しんりょく" ], "hiddenAbilities": [ "ようりょくそ" ], "stats": { "hp": 45, "attack": 49, "defence": 49, "spAttack": 65, "spDefence": 65, "speed": 45 } }, { "no": 2, "name": "フシギソウ", "form": "", "isMegaEvolution": false, "evolutions": [ 3 ], "types": [ "くさ", "どく" ], "abilities": [ "しんりょく" ], "hiddenAbilities": [ "ようりょくそ" ], "stats": { "hp": 60, "attack": 62, "defence": 63, "spAttack": 80, "spDefence": 80, "speed": 60 } }, { "no": 3, "name": "フシギバナ", "form": "", "isMegaEvolution": false, "evolutions": [], "types": [ "くさ", "どく" ], "abilities": [ "しんりょく" ], "hiddenAbilities": [ "ようりょくそ" ], "stats": { "hp": 80, "attack": 82, "defence": 83, "spAttack": 100, "spDefence": 100, "speed": 80 } } ] }
from.jsonの内容をto.jsonに追加する その2
to.jsonのnoが154のメガニウムの後ろに、from.jsonのフシギバナを追加する例を記載します。
using Newtonsoft.Json.Linq; using System; using System.IO; namespace ConsoleApp { class Program { static void Main(string[] args) { string fromJson = File.ReadAllText("from.json"); JObject fromObject = JObject.Parse(fromJson); string toJson = File.ReadAllText("to.json"); JObject toObject = JObject.Parse(toJson); JToken fromPokemons = fromObject.SelectToken("$.pokemon[?(@.no==1)]"); JToken toPokemons = toObject.SelectToken("$.pokemon[?(@.no==154)]"); toPokemons.AddAfterSelf(fromPokemons); Console.WriteLine(toObject.ToString()); } } }
出力結果
{ "pokemon": [ { "no": 152, "name": "チコリータ", "form": "", "isMegaEvolution": false, "evolutions": [ 153 ], "types": [ "くさ" ], "abilities": [ "しんりょく" ], "hiddenAbilities": [ "リーフガード" ], "stats": { "hp": 45, "attack": 49, "defence": 65, "spAttack": 49, "spDefence": 65, "speed": 45 } }, { "no": 153, "name": "ベイリーフ", "form": "", "isMegaEvolution": false, "evolutions": [ 154 ], "types": [ "くさ" ], "abilities": [ "しんりょく" ], "hiddenAbilities": [ "リーフガード" ], "stats": { "hp": 60, "attack": 62, "defence": 80, "spAttack": 63, "spDefence": 80, "speed": 60 } }, { "no": 154, "name": "メガニウム", "form": "", "isMegaEvolution": false, "evolutions": [], "types": [ "くさ" ], "abilities": [ "しんりょく" ], "hiddenAbilities": [ "リーフガード" ], "stats": { "hp": 80, "attack": 82, "defence": 100, "spAttack": 83, "spDefence": 100, "speed": 80 } }, { "no": 1, "name": "フシギダネ", "form": "", "isMegaEvolution": false, "evolutions": [ 2 ], "types": [ "くさ", "どく" ], "abilities": [ "しんりょく" ], "hiddenAbilities": [ "ようりょくそ" ], "stats": { "hp": 45, "attack": 49, "defence": 49, "spAttack": 65, "spDefence": 65, "speed": 45 } } ] }
コメント