以下データを取得して、
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に置き換えるような方法がとれるかもしれません。
どのようにしたら、階層構造のデータになるコードになるか、
お知恵をおかしいただけますと非常に助かります。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/11/14 02:38