回答編集履歴

2

Codableの勉強してきました。

2018/03/01 01:53

投稿

fuzzball
fuzzball

スコア16731

test CHANGED
@@ -1 +1,193 @@
1
+ # 定義
2
+
3
+
4
+
5
+ おかしかったのは、配列のことが考えられていないのと、`TestInfoLink.id`がIntになっていたこと、ぐらいかな。
6
+
7
+
8
+
9
+ ```swift
10
+
11
+ struct Test: Codable {
12
+
13
+
14
+
15
+ var id: Int
16
+
17
+ var title: Rendered
18
+
19
+ var info: TestInfo
20
+
21
+
22
+
23
+ struct Rendered: Codable {
24
+
25
+ var rendered: String
26
+
27
+ }
28
+
29
+
30
+
31
+ struct TestInfo: Codable {
32
+
33
+ var mediaUrl: [TestInfoMedia]
34
+
35
+ var linkUrl: [[TestInfoLink]]
36
+
37
+
38
+
39
+ enum CodingKeys: String, CodingKey {
40
+
41
+ case mediaUrl = "test:mediaUrl"
42
+
43
+ case linkUrl = "test:linkUrl"
44
+
45
+ }
46
+
47
+ }
48
+
49
+
50
+
51
+ struct TestInfoMedia: Codable {
52
+
53
+ var source_url: String
54
+
55
+ }
56
+
57
+
58
+
59
+ struct TestInfoLink: Codable {
60
+
61
+ var id: Int
62
+
63
+ var name: String
64
+
65
+ }
66
+
67
+
68
+
69
+ }
70
+
71
+ ```
72
+
73
+
74
+
75
+ # テスト
76
+
77
+
78
+
79
+ ```swift
80
+
81
+ let stringJson = """
82
+
83
+ {
84
+
85
+ "id": 1,
86
+
87
+ "title": {"rendered": "hogehoge"},
88
+
89
+ "info": {
90
+
91
+ "test:mediaUrl": [
92
+
93
+ {"source_url": "http://example.com/hoge.jpg"},
94
+
95
+ {"source_url": "http://example.com/hogehoge.jpg"},
96
+
97
+ ],
98
+
99
+ "test:linkUrl": [
100
+
101
+ [
102
+
103
+ {"id": 1, "name": "http://example.com/?page=1"},
104
+
105
+ {"id": 2, "name": "http://example.com/?page=2"},
106
+
107
+ ], [
108
+
109
+ {"id": 3, "name": "http://example.com/?page=3"},
110
+
111
+ ],
112
+
113
+ ]
114
+
115
+ }
116
+
117
+ }
118
+
119
+ """
120
+
121
+
122
+
123
+ if let data = stringJson.data(using: .utf8) {
124
+
125
+ if let json = try? JSONDecoder().decode(Test.self, from: data) {
126
+
127
+ print("id=(json.id)")
128
+
129
+ print("title.rendered=\"(json.title.rendered)\"")
130
+
131
+ print("[mediaUrl]")
132
+
133
+ json.info.mediaUrl.enumerated().forEach {
134
+
135
+ print("#($0.0) source_url=\"($0.1.source_url)\"")
136
+
137
+ }
138
+
139
+ print("[linkUrl]")
140
+
141
+ json.info.linkUrl.enumerated().forEach {
142
+
143
+ print("#($0.0)")
144
+
145
+ $0.1.enumerated().forEach {
146
+
147
+ print("\t#($0.0) id=($0.1.id), name=\"($0.1.name)\"")
148
+
149
+ }
150
+
151
+ }
152
+
1
- (deleted)
153
+ } else {
154
+
155
+ print("decoding error")
156
+
157
+ }
158
+
159
+ }
160
+
161
+ ```
162
+
163
+
164
+
165
+ ## テスト結果
166
+
167
+
168
+
169
+ ```
170
+
171
+ id=1
172
+
173
+ title.rendered="hogehoge"
174
+
175
+ [mediaUrl]
176
+
177
+ #0 source_url="http://example.com/hoge.jpg"
178
+
179
+ #1 source_url="http://example.com/hogehoge.jpg"
180
+
181
+ [linkUrl]
182
+
183
+ #0
184
+
185
+ #0 id=1, name="http://example.com/?page=1"
186
+
187
+ #1 id=2, name="http://example.com/?page=2"
188
+
189
+ #1
190
+
191
+ #0 id=3, name="http://example.com/?page=3"
192
+
193
+ ```

1

全然ダメでした。

2018/03/01 01:53

投稿

fuzzball
fuzzball

スコア16731

test CHANGED
@@ -1,19 +1 @@
1
- Codableのことは知りませんが、後半のコードが struct Test の外にあるなら、
2
-
3
-
4
-
5
- ```swift
6
-
7
- truct TestInfo: Codable {
8
-
9
- var mediaUrl: Test.TestInfoMedia
10
-
11
- var linkUrl: Test.TestInfoLink
12
-
13
- }
14
-
15
- ```
16
-
17
-
18
-
19
- でエラーは消えます。
1
+ (deleted)