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

質問編集履歴

3

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

2018/05/01 12:02

投稿

ToshiyukiSato
ToshiyukiSato

スコア12

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を追記

2018/05/01 12:02

投稿

ToshiyukiSato
ToshiyukiSato

スコア12

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を追記

2018/04/29 14:10

投稿

ToshiyukiSato
ToshiyukiSato

スコア12

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
  ```