如何在 coldfusion 中分解未格式化的 json

how to break out a unformatted json in coldfusion

我有一块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。每个 Child JSON 都是他们自己的价值。

任何智慧将不胜感激

在反序列化 json 之后,它只是数组和结构的组合。在您的例子中,是一组复杂的对象。

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

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

所以是这样的:

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

通常在这种情况下,我会在可视化数据时找到安慰。感谢 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#">