我正在尝试创建一个JSON结构,以便将API发送给墨西哥发票提供者(cfdi 3.3)。我已经有了一个函数,它的值为,带有cfloop。问题是,我不知道如何在同一结构中插入不在数组"Items:"中的其他值,如payment_type、customer等。
这是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"
}这是我的代码(连接)
<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"
}我希望我的问题是可读的,如果有人有建议的话,我会很感激。
发布于 2019-08-14 21:15:35
现在,您只返回带有项的数组。将函数的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+)https://stackoverflow.com/questions/57501923
复制相似问题