teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

訂正

2019/04/03 10:22

投稿

退会済みユーザー
answer CHANGED
@@ -90,4 +90,4 @@
90
90
  }
91
91
  ```
92
92
 
93
- MiniJSON でのデシリアライズの結果の Dictionary<string, object> の入れ子のオブジェクト構造に頭を悩ますより、こちらの方がはるかに分かりやすいはずです。
93
+ MiniJSON でのデシリアライズの結果の Dictionary<string, object> の入れ子のオブジェクト構造に頭を悩ますより、こちらの方がはるかに分かりやすいはずです。

1

追記

2019/04/03 10:22

投稿

退会済みユーザー
answer CHANGED
@@ -10,4 +10,84 @@
10
10
 
11
11
  ![イメージ説明](31cb94ead901fcce295e06c0af5cdd90.jpeg)
12
12
 
13
- 構造が分かれば目的の項目をどのように取得できるか分かると思います。上の画像には「local」配下の「section」を文字列として取得するコードもありますので見てください。
13
+ 構造が分かれば目的の項目をどのように取得できるか分かると思います。上の画像には「local」配下の「section」を文字列として取得するコードもありますので見てください。
14
+
15
+ **【追伸】**
16
+
17
+ 質問に対するコメントで、
18
+
19
+ > C# では一般的に使われている JavaScriptSerializer とか Json.NET は使わないという条件ですか?
20
+
21
+ と書きましたが、Json.NET ライブラリを使った方法を紹介しておきます。自分的にはこちらがお勧めです。
22
+
23
+ 問題はデシリアライズされる C# のクラス定義ですが、それは以下のようなサービスを利用すれば簡単です。
24
+
25
+ json2csharp
26
+ [http://json2csharp.com/](http://json2csharp.com/)
27
+
28
+ 簡易逆ジオコーディングサービス [https://www.finds.jp/rgeocode/index.html.ja](https://www.finds.jp/rgeocode/index.html.ja) のページの「実行例」のセクションの「近畿中国四国農業研究センター」の JSON をクリックすると応答として返ってくる JSON 文字列を上記 json2csharp を利用して C# のクラス定義を取得すると以下の通りとなります。
29
+
30
+ ```
31
+ public class Prefecture
32
+ {
33
+ public int pcode { get; set; }
34
+ public string pname { get; set; }
35
+ }
36
+
37
+ public class Municipality
38
+ {
39
+ public string mname { get; set; }
40
+ public int mcode { get; set; }
41
+ }
42
+
43
+ public class Local
44
+ {
45
+ public string section { get; set; }
46
+ public string homenumber { get; set; }
47
+ public double distance { get; set; }
48
+ public double latitude { get; set; }
49
+ public double longitude { get; set; }
50
+ }
51
+
52
+ public class Result
53
+ {
54
+ public Prefecture prefecture { get; set; }
55
+ public Municipality municipality { get; set; }
56
+ public List<Local> local { get; set; }
57
+ }
58
+
59
+ public class Argument
60
+ {
61
+ public double latitude { get; set; }
62
+ public double longitude { get; set; }
63
+ public int localradius { get; set; }
64
+ public int localmax { get; set; }
65
+ }
66
+
67
+ public class Meta
68
+ {
69
+ public string name { get; set; }
70
+ public string content { get; set; }
71
+ }
72
+
73
+ public class RootObject
74
+ {
75
+ public int status { get; set; }
76
+ public Result result { get; set; }
77
+ public Argument argument { get; set; }
78
+ public List<Meta> meta { get; set; }
79
+ }
80
+ ```
81
+
82
+ 上記が得られれば、Json.NET ライブラリを使って以下のコードで同じ結果が得られます。
83
+
84
+ ```
85
+ RootObject rootObject = JsonConvert.DeserializeObject<RootObject>(jsonText);
86
+
87
+ foreach (Local local in rootObject.result.local)
88
+ {
89
+ Console.WriteLine(local.section);
90
+ }
91
+ ```
92
+
93
+ MiniJSON でのデシリアライズの結果の Dictionary<string, object> の入れ子のオブジェクトコ構造に頭を悩ますより、こちらの方がはるかに分かりやすいはずです。