Múltiples tablas misma estructura de datos de columna CFC JSON
Frecuentes
Visto 341 veces
1
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?
1 Respuestas
1
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 json coldfusion cfc or haz tu propia pregunta.
has intentado simplemente
serializeJSON(getAllTypes, true)
? - Henry