Múltiples tablas misma estructura de datos de columna CFC JSON

Estoy tratando de recuperar una lista de tipos de un cfc y devolverlo como JSON. El problema es cómo crear la estructura del JSON. Me he estado devanando los sesos, tratando de obtener esto en formato json, y no estoy seguro de que sea posible tal como está escrito actualmente.

Así que aquí está la configuración. Tengo 4 tablas, todas menos una columna son idénticas. Necesito varias filas de cada tabla.

Intenté obtener los datos apropiados de cada tabla así:

<cfscript>
    tempStruct = setAttributionTypes(dsn,type);
    tempStruct = setCharacteristicTypes(dsn,type);
    //tempArray = setExposureTypes(dsn,type);
    //tempArray = setWeightTypes(dsn,type);             
</cfscript>

Como puede ver, estaba intentando diferentes métodos. Crear una estructura y crear una matriz de estructuras (no se muestra)

Aquí está la consulta actual que estoy usando para recuperar todos los campos en una columna:

<cfquery name="getAllTypes" datasource="#dsn#">
    SELECT udc_code,
           type
    FROM(
        SELECT attribution_id AS udc_code,type
        FROM   tbl_asset_profile_template_attributions
        WHERE  template_id = <cfqueryparam cfsqltype="cf_sql_varchar" value="#type#">
        UNION ALL
        SELECT characteristic_id AS udc_code,type
        FROM   tbl_asset_profile_template_characteristics
        WHERE  template_id = <cfqueryparam cfsqltype="cf_sql_varchar" value="#type#">
        UNION ALL
        SELECT exposure_id AS udc_code,type
            FROM   tbl_asset_profile_template_exposures
        WHERE  template_id = <cfqueryparam cfsqltype="cf_sql_varchar" value="#type#">
        UNION ALL
        SELECT weight_id AS udc_code,type
        FROM   tbl_asset_profile_template_weights
        WHERE  template_id = <cfqueryparam cfsqltype="cf_sql_varchar" value="#type#">) AS tbl
    GROUP  BY type,
                 udc_code
    ORDER  BY type 
</cfquery>

Creé una estructura como [{'attribution1':data,...}{...}], pero eso es bastante difícil de procesar.

He estado tratando de crear una estructura como esta:

 [{ATTRIBTUIONS{'TYPE1','TYPE2',}},{CHARACTERISTICS{'TYPE1',...}}]

Solo me cuesta visualizar lo que necesito.

¿Alguna idea?

preguntado el 03 de mayo de 12 a las 20:05

has intentado simplemente serializeJSON(getAllTypes, true) ? -

1 Respuestas

Con un poco de ajuste de consulta y masaje de datos, puede obtener el objeto json que desea:

1) cambie su consulta a esto:

<cfquery name="getAllTypes" datasource="#dsn#">
SELECT profilename,udc_code
FROM (
    SELECT attribution_id AS udc_code, type, 'Attributions' AS profilename
    FROM   tbl_asset_profile_template_attributions
    WHERE  template_id = <cfqueryparam cfsqltype="cf_sql_varchar" value="#type#">
    UNION ALL
    SELECT characteristic_id AS udc_code, type, 'Characteristics' AS profilename
    FROM   tbl_asset_profile_template_characteristics
    WHERE  template_id = <cfqueryparam cfsqltype="cf_sql_varchar" value="#type#">
    UNION ALL
    SELECT exposure_id AS udc_code, type, 'Exposures' AS profilename
    FROM   tbl_asset_profile_template_exposures
    WHERE  template_id = <cfqueryparam cfsqltype="cf_sql_varchar" value="#type#">
    UNION ALL
    SELECT weight_id AS udc_code, type, 'Weights' AS profilename
    FROM   tbl_asset_profile_template_weights
    WHERE  template_id = <cfqueryparam cfsqltype="cf_sql_varchar" value="#type#">) AS tbl
GROUP  BY profilename, type, udc_code
ORDER  BY profilename, type 
</cfquery>

2) cree una estructura para contener sus datos y complétela usando cfoutput con el atributo GROUP:

<cfset stTypes = structnew()>

<cfoutput query="getAllTypes" group="profilename">
 <cfset stTypes[getAllTypes.profilename] = arraynew(1)>
 <cfoutput>
  <cfset arrayappend(stTypes[getAllTypes.profilename], getAllTypes.type)>
 </cfoutput>
</cfoutput>

3) serializar la estructura en un objeto json:

<cfset jsonobj = serializejson(stTypes)>

Esto creará un objeto json como este:

{'Attributions':['Type1', 'Type2',...], 'Characteristics':['TypeA', 'TypeB',...], ...}

hth

contestado el 05 de mayo de 12 a las 06:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.