雑駁な質問で申し訳ありませんが、方向性だけでもご教唆頂けたらとても幸いです。
ご要望を実現するには、小さいですがいくつかのテーマがあるように思いますので、やることを分解してひとつずつ考えると良いです。簡単に考えて、以下のような流れで実現できると思います。
- Googleドライブ内のJSONファイルが保存されているフォルダーを対象に、ファイル一覧を取得する。
-
- で取得したファイル一覧をもとに、JSONファイルひとつずつ処理を行う。
(1) 県名を対象に処理したい場合
・2. のJSONファイルの内容について、Intensity の配列から対象の県名、例えば「北海道」を対象にして、その要素を処理する。
(2) MaxIntでグループ分け処理したい場合
・2. のJSONファイルの内容について、MaxIntをキーとして連想配列で値を保存していく。
こうすると、キー一覧がすなわちMaxIntのリストとなります。
簡単ですが、以下のJSONデータを作成して、サンプルコードで動作確認してみました。
Json
1{"EventID":"20190901035702",
2 "OriginTime":"2019/09/01 04:00:00",
3 "HypoName":"◯◯沖",
4 "HypoCode":"+35.8+140.9-30000/",
5 "Magnitude":"3.3",
6 "Intensity":[{"PrefName":"A県",
7 "CityName":"A1市",
8 "MaxInt":"3"},
9 {"PrefName":"B県",
10 "CityName":"B1市",
11 "MaxInt":"2"},
12 {"PrefName":"B県",
13 "CityName":"B2市",
14 "MaxInt":"1"},
15 {"PrefName":"B県",
16 "CityName":"B3市",
17 "MaxInt":"1"},
18 {"PrefName":"B県",
19 "CityName":"B4市",
20 "MaxInt":"2"},
21 {"PrefName":"B県",
22 "CityName":"B5市",
23 "MaxInt":"1"},
24 ]
25}
結果はBrowser#msgBox
で逐一表示します。forEach
なども使っていませんし、コードとしては愚直な例で、すぐご理解できると思います。"MaxInt"でのグループ化後は特にソートしていませんし、質問者さんが使いたいデータに加工するにはまだまだだと思いますが、参考にしてみてください。
GAS
1// サンプルコード
2function processInTargetFolder() {
3
4 // Google Driveフォルダーからファイル一覧を取得
5 var folder = DriveApp.getFolderById(<GoogleドライブフォルダーID>");
6 var files = folder.getFiles();
7
8 // フォルダー内のファイル数分ループ
9 while (files.hasNext()) {
10 var file = files.next();
11
12 // JSONファイルをUTF-8として内容を取得
13 var cont = file.getBlob().getDataAsString("utf-8");
14 try {
15 var json = JSON.parse(cont);
16 for (var i = 0; i < json["Intensity"].length; i++) {
17 // B県を対象として処理
18 var name = json["Intensity"][i]["PrefName"]
19 if (name == "B県") {
20 // B県の処理ほにゃらら
21 Browser.msgBox("B県の市名: " + json["Intensity"][i]["CityName"]);
22 }
23 }
24
25 // MaxIntをキーとして、グループ化する。
26 var dict = {}
27
28 // Intensityの配列要素分処理
29 for (var i = 0; i < json["Intensity"].length; i++) {
30 var k = json["Intensity"][i]["MaxInt"];
31 var v = dict[k];
32 if (v) {
33 v += ", " + json["Intensity"][i]["CityName"]
34 } else {
35 v = json["Intensity"][i]["CityName"]
36 }
37 dict[k] = v;
38 }
39
40 for (var k in dict) {
41 Browser.msgBox(" -- MaxInt: " + k + "=" + dict[k]);
42 }
43 } catch (ex) {
44 Browser.msgBox("Exception: " + ex);
45 }
46 }
47
48 Browser.msgBox("-- done.");
49}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/15 23:52
2019/10/16 00:47
2019/10/16 02:07
2019/10/20 14:04
2019/10/20 15:34 編集
2019/10/21 03:40