質問編集履歴

3

取得したJSONデータを配列化する処理

2018/05/01 12:02

投稿

ToshiyukiSato
ToshiyukiSato

スコア12

test CHANGED
File without changes
test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  ```Swift
8
8
 
9
- ["A", <__NSSingleObjectArrayI 0x604000208cc0>(12345)]
9
+ ["A", <__NSSingleObjectArrayI 0x604000208cc0>(12345), <__NSSingleObjectArrayI xxxxxxxxxxxxxx>(98765)]
10
10
 
11
11
  ```
12
12
 
@@ -38,15 +38,15 @@
38
38
 
39
39
  ```Swift
40
40
 
41
- ["A", 12345]
41
+ ["A", 12345, 98765]
42
-
42
+
43
- ```
43
+ ```
44
-
45
-
46
-
47
-
48
-
44
+
45
+
46
+
47
+
48
+
49
- ### コメントいただいた不足点の追記です
49
+ ### コメントいただいた不足点の追記です(2018/04/29)
50
50
 
51
51
  ※コードが長いので今回の相談内容とは関係なさそうな部分は削りましたが、この部分でコメントへの回答になっているか不安です。すみません。
52
52
 
@@ -127,3 +127,103 @@
127
127
  Google Analytics Reporting API v4
128
128
 
129
129
  https://developers.google.com/analytics/devguides/reporting/core/v4/basics?hl=ja
130
+
131
+
132
+
133
+
134
+
135
+ ### コメントいただいた不足点の追記です(2018/05/01)
136
+
137
+ 「取得データを画面表示用の配列に組み替える処理部分がここに入ります(省略)」の部分は以下となっています。少し長いのですが。見づらくて申し訳ないです。
138
+
139
+ ```
140
+
141
+ //reports以下の階層の処理
142
+
143
+ let reports = reportJsonData["reports"] as! NSArray //reports以下のデータを取得する
144
+
145
+ for roop in reports {
146
+
147
+ let next = roop as! NSDictionary //連想配列にする
148
+
149
+ let data = next["data"] as! NSDictionary //data以下のデータを取得する
150
+
151
+ //totals以下の階層の処理
152
+
153
+ let totals = data["totals"] as! NSArray
154
+
155
+ for roopTotals in totals {
156
+
157
+ let nextTotal = roopTotals as! NSDictionary //連想配列にする
158
+
159
+ let totalValues = nextTotal["values"] as! NSArray //values以下のデータを取得する
160
+
161
+ self.totalPvArray.append(totalValues)
162
+
163
+ }
164
+
165
+ //rows以下の階層の処理
166
+
167
+ var titleArray:[Any] = [] //ページタイトル格納用の空配列
168
+
169
+ var valuesArray:[Any] = [] //PV格納用の空配列
170
+
171
+ let rows = data["rows"] as! NSArray
172
+
173
+ for roopNext in rows {
174
+
175
+ let next2 = roopNext as! NSDictionary //連想配列にする
176
+
177
+ let metrics = next2["metrics"] as! NSArray //metrics以下のデータを取得する
178
+
179
+ //metrics以下の階層の処理
180
+
181
+ var valuesArray2:[Any] = []
182
+
183
+ for roopNext2 in metrics {
184
+
185
+ let next3 = roopNext2 as! NSDictionary //連想配列にする
186
+
187
+ let values = next3["values"] as! NSArray //values以下のデータを取得する
188
+
189
+ valuesArray2.append(values)
190
+
191
+ }
192
+
193
+ titleArray = titleArray + [next2["dimensions"]!] //配列にページタイトルを格納する
194
+
195
+ valuesArray = valuesArray + valuesArray2 //配列にPVを格納する
196
+
197
+ }
198
+
199
+ //配列を組み替える
200
+
201
+ var count = 0
202
+
203
+ var count2 = 0
204
+
205
+ let countTotal = titleArray.count
206
+
207
+ while count < countTotal {
208
+
209
+ let pvArrayLine = [titleArray[count],valuesArray[count2],valuesArray[count2+1]]
210
+
211
+ self.pvArray.append(pvArrayLine)
212
+
213
+ count += 1
214
+
215
+ count2 += 2
216
+
217
+ }
218
+
219
+ }
220
+
221
+ //メインスレッドに戻して、テーブルを再描画する
222
+
223
+ DispatchQueue.main.async() { () -> Void in
224
+
225
+ self.PVTable.reloadData()
226
+
227
+ }
228
+
229
+ ```

2

データ取得元APIを追記

2018/05/01 12:02

投稿

ToshiyukiSato
ToshiyukiSato

スコア12

test CHANGED
File without changes
test CHANGED
@@ -119,3 +119,11 @@
119
119
  })]
120
120
 
121
121
  ```
122
+
123
+
124
+
125
+ 以下のAPIからデータ取得しています。
126
+
127
+ Google Analytics Reporting API v4
128
+
129
+ https://developers.google.com/analytics/devguides/reporting/core/v4/basics?hl=ja

1

JSONをパースした方法、元のJSONを追記

2018/04/29 14:10

投稿

ToshiyukiSato
ToshiyukiSato

スコア12

test CHANGED
File without changes
test CHANGED
@@ -41,3 +41,81 @@
41
41
  ["A", 12345]
42
42
 
43
43
  ```
44
+
45
+
46
+
47
+
48
+
49
+ ### コメントいただいた不足点の追記です
50
+
51
+ ※コードが長いので今回の相談内容とは関係なさそうな部分は削りましたが、この部分でコメントへの回答になっているか不安です。すみません。
52
+
53
+
54
+
55
+ > JSONをパースした方法
56
+
57
+
58
+
59
+ ```Swift
60
+
61
+ let taskReport = URLSession.shared.dataTask(with: request, completionHandler: {jsonData, response, error in
62
+
63
+ do {
64
+
65
+ let reportJsonData = try JSONSerialization.jsonObject(with: jsonData!) as! Dictionary<String, Any>
66
+
67
+ //取得データを画面表示用の配列に組み替える処理部分がここに入ります(省略)
68
+
69
+ }catch{
70
+
71
+ print(error.localizedDescription)
72
+
73
+ }
74
+
75
+ })
76
+
77
+ taskReport.resume()
78
+
79
+ ```
80
+
81
+
82
+
83
+
84
+
85
+ > 元のJSON
86
+
87
+
88
+
89
+ ```JSON
90
+
91
+ ["reports": <__NSSingleObjectArrayI 0x6000002035d0>({
92
+
93
+ columnHeader = {
94
+
95
+ dimensions = ("ga:pageTitle");
96
+
97
+ };
98
+
99
+ data = {
100
+
101
+ rows = ({
102
+
103
+ dimensions = ("A");
104
+
105
+ metrics = ({
106
+
107
+ values = (12345);
108
+
109
+ },{
110
+
111
+ values = (98765);
112
+
113
+ });
114
+
115
+ });
116
+
117
+ };
118
+
119
+ })]
120
+
121
+ ```