質問編集履歴
3
取得したJSONデータを配列化する処理
title
CHANGED
File without changes
|
body
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
その配列をprintすると、以下のように「NSSingleObjectArrayI」というものが入りました。
|
3
3
|
|
4
4
|
```Swift
|
5
|
-
["A", <__NSSingleObjectArrayI 0x604000208cc0>(12345)]
|
5
|
+
["A", <__NSSingleObjectArrayI 0x604000208cc0>(12345), <__NSSingleObjectArrayI xxxxxxxxxxxxxx>(98765)]
|
6
6
|
```
|
7
7
|
|
8
8
|
この配列をtableViewで画面表示しようとすると、以下のエラーが出ます。
|
@@ -18,11 +18,11 @@
|
|
18
18
|
的はずれな質問になっていましたら申し訳ございません。
|
19
19
|
|
20
20
|
```Swift
|
21
|
-
["A", 12345]
|
21
|
+
["A", 12345, 98765]
|
22
22
|
```
|
23
23
|
|
24
24
|
|
25
|
-
### コメントいただいた不足点の追記です
|
25
|
+
### コメントいただいた不足点の追記です(2018/04/29)
|
26
26
|
※コードが長いので今回の相談内容とは関係なさそうな部分は削りましたが、この部分でコメントへの回答になっているか不安です。すみません。
|
27
27
|
|
28
28
|
> JSONをパースした方法
|
@@ -62,4 +62,54 @@
|
|
62
62
|
|
63
63
|
以下のAPIからデータ取得しています。
|
64
64
|
Google Analytics Reporting API v4
|
65
|
-
https://developers.google.com/analytics/devguides/reporting/core/v4/basics?hl=ja
|
65
|
+
https://developers.google.com/analytics/devguides/reporting/core/v4/basics?hl=ja
|
66
|
+
|
67
|
+
|
68
|
+
### コメントいただいた不足点の追記です(2018/05/01)
|
69
|
+
「取得データを画面表示用の配列に組み替える処理部分がここに入ります(省略)」の部分は以下となっています。少し長いのですが。見づらくて申し訳ないです。
|
70
|
+
```
|
71
|
+
//reports以下の階層の処理
|
72
|
+
let reports = reportJsonData["reports"] as! NSArray //reports以下のデータを取得する
|
73
|
+
for roop in reports {
|
74
|
+
let next = roop as! NSDictionary //連想配列にする
|
75
|
+
let data = next["data"] as! NSDictionary //data以下のデータを取得する
|
76
|
+
//totals以下の階層の処理
|
77
|
+
let totals = data["totals"] as! NSArray
|
78
|
+
for roopTotals in totals {
|
79
|
+
let nextTotal = roopTotals as! NSDictionary //連想配列にする
|
80
|
+
let totalValues = nextTotal["values"] as! NSArray //values以下のデータを取得する
|
81
|
+
self.totalPvArray.append(totalValues)
|
82
|
+
}
|
83
|
+
//rows以下の階層の処理
|
84
|
+
var titleArray:[Any] = [] //ページタイトル格納用の空配列
|
85
|
+
var valuesArray:[Any] = [] //PV格納用の空配列
|
86
|
+
let rows = data["rows"] as! NSArray
|
87
|
+
for roopNext in rows {
|
88
|
+
let next2 = roopNext as! NSDictionary //連想配列にする
|
89
|
+
let metrics = next2["metrics"] as! NSArray //metrics以下のデータを取得する
|
90
|
+
//metrics以下の階層の処理
|
91
|
+
var valuesArray2:[Any] = []
|
92
|
+
for roopNext2 in metrics {
|
93
|
+
let next3 = roopNext2 as! NSDictionary //連想配列にする
|
94
|
+
let values = next3["values"] as! NSArray //values以下のデータを取得する
|
95
|
+
valuesArray2.append(values)
|
96
|
+
}
|
97
|
+
titleArray = titleArray + [next2["dimensions"]!] //配列にページタイトルを格納する
|
98
|
+
valuesArray = valuesArray + valuesArray2 //配列にPVを格納する
|
99
|
+
}
|
100
|
+
//配列を組み替える
|
101
|
+
var count = 0
|
102
|
+
var count2 = 0
|
103
|
+
let countTotal = titleArray.count
|
104
|
+
while count < countTotal {
|
105
|
+
let pvArrayLine = [titleArray[count],valuesArray[count2],valuesArray[count2+1]]
|
106
|
+
self.pvArray.append(pvArrayLine)
|
107
|
+
count += 1
|
108
|
+
count2 += 2
|
109
|
+
}
|
110
|
+
}
|
111
|
+
//メインスレッドに戻して、テーブルを再描画する
|
112
|
+
DispatchQueue.main.async() { () -> Void in
|
113
|
+
self.PVTable.reloadData()
|
114
|
+
}
|
115
|
+
```
|
2
データ取得元APIを追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -58,4 +58,8 @@
|
|
58
58
|
});
|
59
59
|
};
|
60
60
|
})]
|
61
|
-
```
|
61
|
+
```
|
62
|
+
|
63
|
+
以下のAPIからデータ取得しています。
|
64
|
+
Google Analytics Reporting API v4
|
65
|
+
https://developers.google.com/analytics/devguides/reporting/core/v4/basics?hl=ja
|
1
JSONをパースした方法、元のJSONを追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -19,4 +19,43 @@
|
|
19
19
|
|
20
20
|
```Swift
|
21
21
|
["A", 12345]
|
22
|
+
```
|
23
|
+
|
24
|
+
|
25
|
+
### コメントいただいた不足点の追記です
|
26
|
+
※コードが長いので今回の相談内容とは関係なさそうな部分は削りましたが、この部分でコメントへの回答になっているか不安です。すみません。
|
27
|
+
|
28
|
+
> JSONをパースした方法
|
29
|
+
|
30
|
+
```Swift
|
31
|
+
let taskReport = URLSession.shared.dataTask(with: request, completionHandler: {jsonData, response, error in
|
32
|
+
do {
|
33
|
+
let reportJsonData = try JSONSerialization.jsonObject(with: jsonData!) as! Dictionary<String, Any>
|
34
|
+
//取得データを画面表示用の配列に組み替える処理部分がここに入ります(省略)
|
35
|
+
}catch{
|
36
|
+
print(error.localizedDescription)
|
37
|
+
}
|
38
|
+
})
|
39
|
+
taskReport.resume()
|
40
|
+
```
|
41
|
+
|
42
|
+
|
43
|
+
> 元のJSON
|
44
|
+
|
45
|
+
```JSON
|
46
|
+
["reports": <__NSSingleObjectArrayI 0x6000002035d0>({
|
47
|
+
columnHeader = {
|
48
|
+
dimensions = ("ga:pageTitle");
|
49
|
+
};
|
50
|
+
data = {
|
51
|
+
rows = ({
|
52
|
+
dimensions = ("A");
|
53
|
+
metrics = ({
|
54
|
+
values = (12345);
|
55
|
+
},{
|
56
|
+
values = (98765);
|
57
|
+
});
|
58
|
+
});
|
59
|
+
};
|
60
|
+
})]
|
22
61
|
```
|