質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Apex

Apexは、Salesforce上で動作するアプリケーション作成をサポートするアプリケーション開発プラットフォーム。プログラミング言語であるApexコードと、独自のApex WebサービスAPIなどで構成されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

1151閲覧

DBから取得したデータを階層構造JSONに整形する方法

退会済みユーザー

退会済みユーザー

総合スコア0

Apex

Apexは、Salesforce上で動作するアプリケーション作成をサポートするアプリケーション開発プラットフォーム。プログラミング言語であるApexコードと、独自のApex WebサービスAPIなどで構成されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/11/04 09:27

以下データを取得して、

RegionCode RegionName PrefectureCode PrefectureName CityGroupCode CityGroupName CityCd CityName 010 北海道 01 北海道 01 札幌市 01101 札幌市中央区 010 北海道 01 北海道 01 札幌市 01102 札幌市北区 010 北海道 01 北海道 02 道央 - そのほかの地域 01203 小樽市 010 北海道 01 北海道 02 道央 - そのほかの地域 01205 室蘭市 020 東北 04 宮城県 01 仙台市 04101 仙台市青葉区 020 東北 04 宮城県 01 仙台市 04102 仙台市宮城野区 020 東北 04 宮城県 02 宮城県 - そのほかの地域 04202 石巻市 020 東北 04 宮城県 02 宮城県 - そのほかの地域 04203 塩竈市

以下の結果を出力したいです。

json

1[ 2 { 3 "id": "010", 4 "title": "北海道", 5 "items": [ 6 { 7 "id": "01", 8 "title": "北海道", 9 "items": [ 10 { 11 "id": "01", 12 "title": "札幌市", 13 "items": [ 14 { 15 "id": "01101", 16 "title": "札幌市中央区", 17 "isSelected": true 18 }, 19 { 20 "id": "01102", 21 "title": "札幌市北区" 22 } 23 ], 24 "isSelected": false 25 }, 26 { 27 "id": "02", 28 "title": "道央", 29 "items": [ 30 { 31 "id": "01203", 32 "title": "小樽市" 33 }, 34 { 35 "id": "01105", 36 "title": "室蘭市", 37 "isSelected": true 38 } 39 ], 40 "isSelected": false 41 } 42 ], 43 "isSelected": false 44 } 45 ], 46 "isSelected": false 47 }, 48 { 49 "id": "020", 50 "title": "東北", 51 "items": [ 52 { 53 "id": "04", 54 "title": "宮城県", 55 "items": [ 56 { 57 "id": "01", 58 "title": "仙台市", 59 "items": [ 60 { 61 "id": "04101", 62 "title": "仙台市青葉区", 63 "isSelected": false 64 }, 65 { 66 "id": "04102", 67 "title": "仙台市宮城野区" 68 } 69 ] 70 }, 71 { 72 "id": "02", 73 "title": "宮城県 - そのほかの地域", 74 "items": [ 75 { 76 "id": "04202", 77 "title": "石巻市" 78 }, 79 { 80 "id": "04203", 81 "title": "塩竈市" 82 } 83 ] 84 } 85 ] 86 } 87 ] 88 } 89]

上記を結果を得るため、以下のようなデータ構造をつくって、
うまいこと、紐づけながら階層構造を作って、最後にJSON.serializeメソッドで作れるのではと考えているのですが、階層を紐付けるところまでにたどり着きません。。

sfdc:apex

1public class LeafData { 2 public String id { get; set; } 3 public String title { get; set; } 4 public Boolean isSelected { get; set; } 5 public List<LeafData> items { get; set; } 6 7 public LeafData(String id, String title, Boolean isSelected) { 8 this.id = id; 9 this.title = title; 10 this.isSelected = isSelected; 11 } 12}

sfdc:apex

1List<Aria__c> Arias = [SELECT RegionCode__c, RegionName__c, PrefectureCode__c, PrefectureName__c, CityGroupCode__c, CityGroupName__c, CityCode__c, CityName__c FROM Aria__c]; 2 3Map<String, LeafData> firstLeafMap = new Map<String, LeafData>(); 4Map<String, LeafData> secondLeafMap = new Map<String, LeafData>(); 5Map<String, LeafData> thirdLeafMap = new Map<String, LeafData>(); 6Map<String, LeafData> fourthLeafMap = new Map<String, LeafData>(); 7 8for (Aria__c Aria : Arias) { 9 firstLeafMap.put(Aria.RegionCode__c, new LeafData(Aria.RegionCode__c, Aria.RegionName__c, false)); 10 11 secondLeafMap.put(Aria.RegionCode__c + Aria.PrefectureCode__c, new LeafData(Aria.PrefectureCode__c, Aria.PrefectureName__c, false)); 12 13 thirdLeafMap.put(Aria.RegionCode__c + Aria.PrefectureCode__c + Aria.CityGroupCode__c, new LeafData(Aria.CityGroupCode__c, Aria.CityGroupName__c, false)); 14 15 fourthLeafMap.put(Aria.RegionCode__c + Aria.PrefectureCode__c + Aria.CityGroupCode__c + Aria.CityCode__c, new LeafData(Aria.CityCode__c, Aria.CityName__c, false)); 16 17} 18 19List<LeafData> leaf = new List<LeafData>(); 20for (String firstKey : firstLeafMap.keySet()) { 21 for (String secondKey : secondLeafMap.keySet()) { 22 for (String thirdKey : thirdLeafMap.keySet()) { 23 for (String fourthKey : fourthLeafMap.keySet()) { 24 Map<String, String> lv1Map = new Map<String, String>{ 25 'id' => firstKey, 26 'title' => firstLeafMap.get(firstKey).title, 27 'items' => new List<LeafData>() 28 }; 29 } 30 } 31 } 32} 33

上記言語はSalesforceのApexという言語ですが、Javaと近いので、
Javaで表現いただければ、Apexに置き換えるような方法がとれるかもしれません。

どのようにしたら、階層構造のデータになるコードになるか、
お知恵をおかしいただけますと非常に助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

定番のグループトータルのロジックです。
リストを項目ごとに集計する

投稿2018/11/04 12:10

seastar3

総合スコア2285

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/11/14 02:38

やりたいこととは別だったのですが、ご回答ありがとうございました!
guest

0

sho322さんの「DBから値を取得して、Javaオブジェクトに詰め込んで、ブラウザにJSONで返すサンプル。」の記事が参考になると思います。
サーブレットによる処理なので、流れが違ってくると思いますが、利用するライブラリ等は同様になるでしょう。

投稿2018/11/04 09:37

seastar3

総合スコア2285

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/11/04 11:59

ありがとうございます。 DB取得処理やJSONに吐き出すメソッドというより、 階層構造を整形するロジックが知りたいです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問