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が(報告されます)、削除しても機能しません。

質問:
私は何が間違っているのですか?キーと値のペアが削除されないのはなぜですか?

編集
わかりました。それを見つけた。データベースにフィールドを照会し、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

ColdFusion2016用のAdamのソリューションの更新バージョン

<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 に答える