如何在 Coldfusion 中分解未格式化的 JSON



我有一段JSON(一个例子):

["12086012800", ["XXX3220210230310", "XXX3220210260120", "XXX3220210170580", "XXX3220210170220", "XXX3220210270310", "XXX3220210080320", "XXX3220210110020", "XXX3220210220530", "XXX3220210020480", "XXX3220210170210", "XXX3220210230160", "XXX3220210060020", "XXX3220210220160", "XXX3220210110130", "XXX3220210021300", "XXX3220210260220", "XXX3220210260590", "XXX3220210210080", "XXX3220210020740", "XXX3220210020780", "XXX3220210270020", "XXX3220210260020", "XXX3220210230290", "XXX3220210260110", "XXX3220210080080", "XXX3220210110010", "XXX3220210220280", "XXX3220210230280", "XXX3220210021040", "XXX3220210220490", "XXX3220210220170", "XXX3220210230530", "XXX3220210020750", "XXX3220210060280", "XXX3220210230790", "XXX3220210230480", "XXX3220210220460", "XXX3220210260010"],
    [{
        "lat": 25.91026573627833,
        "lng": -80.34233093261719
    }, {
        "lat": 25.909648111101557,
        "lng": -80.34602165222168
    }, {
        "lat": 25.905015819188293,
        "lng": -80.34499168395996
    }, {
        "lat": 25.904243752850498,
        "lng": -80.34310340881348
    }, {
        "lat": 25.906714347345247,
        "lng": -80.34147262573242
    }, {
        "lat": 25.90972531442551,
        "lng": -80.34233093261719
    }]
]

它从$.ajax调用进入cfm页面:

var save = {
    poly: function() {
        var value = [];
        value.push(GEOID);
        value.push($.map(selected, function(el) { return el; }));
        value.push(getpaths(poly));
        console.log(JSON.stringify(value));
        $.ajax({
            type: "POST",
            url: 'data/geoselect_insert.cfm',
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify(value),
            async: false,
            dataType: "json",
            success: function (location) {
                console.log("saved");
            }
        });
    }
}

我需要工作的 cfm 页面类似于以下内容:

<cfsetting showdebugoutput="yes">
<cfheader name="Content-Type" value="application/json">
<CFPARAM name="cookie.UserID" default="0">
<CFPARAM name="PropertySearchID" default="0">
<cfset ParcelJSON = toString( getHttpRequestData().content ) /> 
<!--- Double-check to make sure it's a JSON value. --->
<cfif isJSON( ParcelJSON )>

<cfset ParcelJSON2 = DeserializeJSON(ParcelJSON, true) >
<cfoutput>#ParcelJSON2[0]#</cfoutput>

</cfif>

我假设 ParcelJSON2 是 ParcelJSON 的某种形式的突破。我需要将 JSON 拆分为三个变量

<cfset Variable1 = (insert wisdom here) >  <--"12086012800",
<cfset Variable2 = (insert wisdom here) >  <--["XXX3220210230310","X...]
<cfset Variable3 = (insert wisdom here) >  <--["lat":"23.9999"......]

我想执行一个 cfquery 插入来输入这些值。如何在不破坏子 JSON 的情况下中断传入的 JSON。 每个子 JSON 都是它们自己的值。

任何智慧将不胜感激

通常在这种情况下,我在可视化数据中找到安慰。多亏了ColdFusion,它变得简单。在调用 DeserializeJSON 后,立即转储数据,以便您可以看到它。

<cfdump var="#ParcelJSON2#">

此时,您将看到一个格式良好的 ColdFusion 数据转储,您可以根据需要获取、输出和操作这些数据。

<cfset Variable1 = ParcelJSON[1] />
<cfset Variable2 = ParcelJSON[2] />
<cfset Variable3 = ParcelJSON[3] />

如果需要从 CF 变量中恢复 JSON,可以撤消部分过程。

<cfset Variable1 = serializeJSON(ParcelJSON[1]) />
<cfset Variable2 = serializeJSON(ParcelJSON[2]) />
<cfset Variable3 = serializeJSON(ParcelJSON[3]) />

最后,要查看它是否按照您想要的方式工作,请尝试再次转储:

<cfdump var="#variables#">

在你反序列化你的json之后,它只是结束了数组和结构的组合。在您的情况下,复杂对象的数组。

因此,如果您收到的 JSON 始终采用相同的格式。

我注意到在您的示例中,您使用 Zero 来引用 CFML 数组中的第一个元素,从 One 开始(与几乎所有其他语言不同)。

所以像这样:

<cfset Variable1 = ParcelJSON2[1]>  <--"12086012800", 
<cfset Variable2 = ParcelJSON2[2] >  <--["XXX3220210230310","X...]
<cfset Variable3 = ParcelJSON2[3] >  <--["lat":"23.9999"......]

最新更新