2013-05-03 76 views
1

我想生成一個代表父級子級別的JSON。我想盡量減少服務器端的循環以獲得低於預期的JSON結構。是否有可能從一個sql語句獲取數據,我可以在服務器端使用(使用最小循環)來生成此JSON。 我必須支持Oracle,DB2,SYBASE,SQL服務器等 下面是我的表結構和相應的樣本數據爲父子行生成JSON。父級子級深度是動態的

CREATE TABLE TABLEA 
    (
    SCEID VARCHAR(10), 
    Group_Step VARCHAR(100) 
    ); 

    CREATE TABLE TABLEB 
    (
    SCEID VARCHAR(10), 
    Group_Step VARCHAR(100), 
    Parent_step VARCHAR(100) 
); 

    --- FOR TABLEA--WHICH stores all the group_step 
    insert into TABLEA values('0000000001','ALLOC1'); 
    insert into TABLEA values('0000000001','ASDF'); 
    insert into TABLEA values('0000000001','BENEFITS'); 
    insert into TABLEA values('0000000001','COPY_BUDG'); 
    insert into TABLEA values('0000000001','CRRNT_PER'); 
    insert into TABLEA values('0000000001','GL_TO_PC'); 
    insert into TABLEA values('0000000001','OVERHEAD'); 
    insert into TABLEA values('0000000001','PC_TO_PC'); 

--for child(group_step) and parent.. THIS table will have data for the rows having parent child. 

    insert into TABLEB values('0000000001','BENEFITS','ASDF'); 
    insert into TABLEB values('0000000001','COPY_BUDG','BENEFITS'); 
    insert into TABLEB values('0000000001','GL_TO_PC','COPY_BUDG'); 
    insert into TABLEB values('0000000001','OVERHEAD','CRRNT_PER'); 
    insert into TABLEB values('0000000001','OVERHEAD','GL_TO_PC'); 

和我預期的JSON格式低於和想達到以下格式在最短的循環

 { 
     "d": { 
     "total": 0, 
     "page": 0, 
     "records": 0, 
     "rows": [ 
     { 
      "id": "1", 
      "Exclude": "0", 
      "Groupstep": "PC_TO_PC", 
      "Version": "0", 
      "Columnnum": "1", 
      "Child": [ 
       {} 
      ] 
     }, 
     { 
      "id": "2", 
      "Exclude": "0", 
      "Groupstep": "OVERHEAD", 
      "Version": "0", 
      "Columnnum": "1", 
      "Child": [ 
       {} 
      ] 
     }, 
     { 
      "id": "3", 
      "Exclude": "0", 
      "Groupstep": "BENEFITS", 
      "Version": "1", 
      "Columnnum": "1", 
      "Child": [ 
       { 
        "id": "301", 
        "Groupstep": "ALLOC1", 
        "Version": "0", 
        "Columnnum": "2", 
        "child": [ 
         { 
          "id": "3011", 
          "Groupstep": "ALLOC2", 
          "Version": "0", 
          "Columnnum": "3" 
         } 
        ] 
       }, 
       { 
        "id": "302", 
        "Groupstep": "PC_WIP", 
        "Version": "0", 
        "Columnnum": "2" 
       } 
      ] 
     }, 
     { 
      "id": "4", 
      "Exclude": "0", 
      "Groupstep": "FRA_LOC_IU", 
      "Version": "0", 
      "Columnnum": "1", 
      "Child": [ 
       {} 
      ] 
     }, 
     { 
      "id": "5", 
      "Exclude": "0", 
      "Groupstep": "NEXT_YEAR", 
      "Version": "0", 
      "Columnnum": "2", 
      "Child": [ 
       { 
        "id": "501", 
        "Groupstep": "FRA_LOC_IU", 
        "Version": "0", 
        "Columnnum": "3" 
       }, 
       { 
        "id": "502", 
        "Groupstep": "FRA_LOC_IU1", 
        "Version": "0", 
        "Columnnum": "3" 
       } 
      ] 
     }, 
     { 
      "id": "6", 
      "Exclude": "0", 
      "Groupstep": "CRRNT_PER", 
      "Version": "0", 
      "Columnnum": "2", 
      "Child": [ 
       { 
        "id": "601", 
        "Groupstep": "ACT_BD_ACT", 
        "Version": "0", 
        "Columnnum": "3" 
       }, 
       { 
        "id": "602", 
        "Groupstep": "CRRNT_PER", 
        "Version": "0", 
        "Columnnum": "3" 
       } 
       ] 
      } 
     ] 
     } 
    } 
+0

您使用的是什麼應用程序服務器? – invertedSpear 2013-05-03 22:07:25

+0

peopletools。它是一個人性化的專有工具。 – JDev 2013-05-04 03:21:17

回答

0

跟進 from comment

class Thing { 
    Integer id; 
    String name; 
    String type; 
    Integer[] children; 


public String printMe(Map<Integer, Thing> allThings) { 
    String ret = "... format json stuff here"; // if there are children then add the key name else format the json key:value pairs of the leaf 
    for(Integer childId in children) { 
     Thing child = allThings.get(childId); 
     ret += child.printMe(allThings); 
    } 
    ret += "Format json stuff here"; 
    return ret; 
} 
}; 

我希望HEL PS。

+0

感謝您的回覆。但是因爲我不知道java,所以如果你可以爲邏輯寫更多的描述,我會非常感激,所以我可以在我的服務器端嘗試這個。 – JDev 2013-05-14 00:15:55

相關問題