Coldfusion 使用 ArrayAppend 和 cfloop 创建 Json
Coldfusion create Json with ArrayAppend & cfloop
我正在尝试创建一个 JSON 结构以将 API 发送给墨西哥发票提供商 (cfdi 3.3)。我已经有一个带有项目值的函数,带有 cfloop。问题是我不知道如何在相同的结构中插入不在数组"Items:"
内的其他值,例如payment_type,客户等
这是API请求的例子
curl https://www.facturapi.io/v1/invoices \
-u "sk_test_API_KEY:" \
-H "Content-Type: application / json" \
-d '{
"customer": "58e93ionede86eb318b0197456",
"items": [{
"quantity": 2,
"product": "58e93ionede86eb318b0197454"
}],
"payment_form": "06",
"folio_number": 914,
"series": "A"
} '
我想得到这样的结构:
{
"customer": "77e93ionede86eb318b0197456",
"items": [
{
"quantity": 2,
"product": "99e93etimee86eb318b0191111"
},
{
"quantity": 5,
"product": "88e55etimee86eb999b0192222"
}
],
"payment_form": "06",
"folio_number": 914,
"series": "A"
}
这是我的代码 (cffunction)
<cfcomponent>
<cfset #dsnvtasmart# = "popmart">
<cffunction name="result" access="remote"
returntype="array"
returnformat="JSON"
hint="it is the text">
<cfset #dsnvtasmart# = "popmart">
<cfquery name="qProd" datasource="#dsnvtasmart#">
SELECT det_ordenp.cant AS quantity
, det_ordenp.api_id_prod AS product
FROM det_ordenp
WHERE det_ordenp.id_orden = #worden#
</cfquery>
<!---
**---Other values Json Struct.--------**
--->
<cfset customer =#77e93ionede86eb318b0197456#>
<cfset payment_form = '06'>
<cfset folio_number = 914>
<cfset series = 'A'>
<cfloop query="qProd">
<cfset var empStruct = {"quantity":#qProd.quantity#, "product":#qProd.product#}>
<cfset arrayAppend (result, empStruct)>
</cfloop>
<cfreturn result>
</cffunction>
</cfcomponent>
目前,使用这段代码,我只得到:
[
{
"quantity": 6,
"product": "5d5307eb8a6ce057e78b32be"
},
{
"quantity": 37,
"product": "5d53080d8a6ce057e78b32c0"
}
]
我不知道如何在 empStruct
中包含 :
的值
{
"customer": "77e93ionede86eb318b0197456",
"payment_form": "06",
"folio_number": 914,
"series": "A"
}
我希望我的问题是可读的,如果有人有建议,我将不胜感激。
现在,您只返回一个包含项目的数组。将函数的 returnType
更改为 struct
并像这样修改代码:
<cffunction ... returnType="struct" returnFormat="JSON">
...
</cfquery>
<cfset var response = {}>
<cfset response["customer"] = "77e93ionede86eb318b0197456">
<cfset response["items"] = []>
<cfset response["payment_form"] = "06">
<cfset response["folio_number"] = 914>
<cfset response["series"] = "A">
<cfloop query="qProd">
<cfset var item = {}>
<cfset item["quantity"] = qProd.quantity>
<cfset item["product"] = qProd.product>
<cfset arrayAppend(response["items"], item)>
</cfloop>
<cfreturn response>
</cffunction>
- 我用
...
跳过了一些代码。
- 对结构使用括号表示法(如
response["customer"]
)将保证键的大小写,而使用点表示法(如response.customer
)可能会导致序列化为"CUSTOMER":
稍后。
arrayAppend(array, element)
是 array.add(element)
的丑化版本(所有 CF 版本),即 array.append(element)
(CF2016+)
我正在尝试创建一个 JSON 结构以将 API 发送给墨西哥发票提供商 (cfdi 3.3)。我已经有一个带有项目值的函数,带有 cfloop。问题是我不知道如何在相同的结构中插入不在数组"Items:"
内的其他值,例如payment_type,客户等
这是API请求的例子
curl https://www.facturapi.io/v1/invoices \
-u "sk_test_API_KEY:" \
-H "Content-Type: application / json" \
-d '{
"customer": "58e93ionede86eb318b0197456",
"items": [{
"quantity": 2,
"product": "58e93ionede86eb318b0197454"
}],
"payment_form": "06",
"folio_number": 914,
"series": "A"
} '
我想得到这样的结构:
{
"customer": "77e93ionede86eb318b0197456",
"items": [
{
"quantity": 2,
"product": "99e93etimee86eb318b0191111"
},
{
"quantity": 5,
"product": "88e55etimee86eb999b0192222"
}
],
"payment_form": "06",
"folio_number": 914,
"series": "A"
}
这是我的代码 (cffunction)
<cfcomponent>
<cfset #dsnvtasmart# = "popmart">
<cffunction name="result" access="remote"
returntype="array"
returnformat="JSON"
hint="it is the text">
<cfset #dsnvtasmart# = "popmart">
<cfquery name="qProd" datasource="#dsnvtasmart#">
SELECT det_ordenp.cant AS quantity
, det_ordenp.api_id_prod AS product
FROM det_ordenp
WHERE det_ordenp.id_orden = #worden#
</cfquery>
<!---
**---Other values Json Struct.--------**
--->
<cfset customer =#77e93ionede86eb318b0197456#>
<cfset payment_form = '06'>
<cfset folio_number = 914>
<cfset series = 'A'>
<cfloop query="qProd">
<cfset var empStruct = {"quantity":#qProd.quantity#, "product":#qProd.product#}>
<cfset arrayAppend (result, empStruct)>
</cfloop>
<cfreturn result>
</cffunction>
</cfcomponent>
目前,使用这段代码,我只得到:
[
{
"quantity": 6,
"product": "5d5307eb8a6ce057e78b32be"
},
{
"quantity": 37,
"product": "5d53080d8a6ce057e78b32c0"
}
]
我不知道如何在 empStruct
中包含 :
{
"customer": "77e93ionede86eb318b0197456",
"payment_form": "06",
"folio_number": 914,
"series": "A"
}
我希望我的问题是可读的,如果有人有建议,我将不胜感激。
现在,您只返回一个包含项目的数组。将函数的 returnType
更改为 struct
并像这样修改代码:
<cffunction ... returnType="struct" returnFormat="JSON">
...
</cfquery>
<cfset var response = {}>
<cfset response["customer"] = "77e93ionede86eb318b0197456">
<cfset response["items"] = []>
<cfset response["payment_form"] = "06">
<cfset response["folio_number"] = 914>
<cfset response["series"] = "A">
<cfloop query="qProd">
<cfset var item = {}>
<cfset item["quantity"] = qProd.quantity>
<cfset item["product"] = qProd.product>
<cfset arrayAppend(response["items"], item)>
</cfloop>
<cfreturn response>
</cffunction>
- 我用
...
跳过了一些代码。 - 对结构使用括号表示法(如
response["customer"]
)将保证键的大小写,而使用点表示法(如response.customer
)可能会导致序列化为"CUSTOMER":
稍后。 arrayAppend(array, element)
是array.add(element)
的丑化版本(所有 CF 版本),即array.append(element)
(CF2016+)