4

(使用Coldfusion8/MySQL5.0.88)

我将 JSON 字符串存储在数据库中。字符串由一个id(键)和items一个列表中的数字(值)组成。

值如下所示:

LOCAL.dropRecall = {"994323":"596895,596871,596864,596888,596840abc,596833,596826","991234":"9999,8888,abced"}

我的问题是尝试删除一key/value对。我正在尝试这样:

<cfif  StructKeyExists(LOCAL.dropRecall,"#Session.id#")>
   <cfdump output="e:\dump.txt" label="catch" var="detected">
   <cfset StructDelete( LOCAL.dropRecall,"#Session.id#", "true")>
</cfif>

正确检测到键/值对(detected报告),但删除它不起作用。

问题:
我做错了什么?为什么没有删除键/值对?

编辑
好的。找到了。我在数据库中查询 field items,将其设置为LOCAL.dropRecall并写items回数据库......所以structDelete工作正常,但我没有将空结构写回数据库。

4

3 回答 3

4

检查 的值session.id是否是您认为的值(没有额外的空格或类似的东西)。如果您的代码在 CF8 上,我尝试了修改,它对我来说效果很好:

<cfset variables.id = 991234>
<cfset LOCAL.dropRecall = deserializeJson('{"994323":"596895,596871,596864,596888,596840abc,596833,596826","991234":"9999,8888,abced"}')>
<cfset LOCAL.safeCopy = duplicate(LOCAL.dropRecall)> 

<cfif  StructKeyExists(LOCAL.dropRecall,"#variables.id#")>
    <cfset StructDelete( LOCAL.dropRecall,"#variables.id#", "true")>
</cfif>
<cfdump var="#LOCAL#">

该代码对您不起作用吗?

于 2012-12-04T18:59:53.687 回答
1

我想知道问题是不是你里面的变量名LOCAL.dropRecall以数字开头?ColdFusion 变量应始终以字母、下划线或 Unicode 货币符号开头。

于 2012-12-04T18:48:37.533 回答
0

亚当的 ColdFusion 2016 解决方案的更新版本

<cfscript>
   variables.id = 991234;
   LOCAL.dropRecall = deserializeJson('{"994323":"596895,596871,596864,596888,596840abc,596833,596826","991234":"9999,8888,abced"}');
   LOCAL.safeCopy = duplicate(LOCAL.dropRecall);

   LOCAL.dropRecall.delete(variables.id); // you don't have to test if it is there

   writedump(LOCAL);
</cfscript>
于 2018-04-22T02:39:12.533 回答