この記事の内容
この記事では、.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
}
}
]
}

コメント