【问题标题】:String to Array with evaluate() fails使用评估()的字符串到数组失败
【发布时间】:2013-12-03 14:32:52
【问题描述】:

如何将字符串转换为数组

<cfscript>
    stResult = {    strData = "[1,2,3,4,5,6]"
                 ,  arInstant = [1,2,3,4,5,6]
               };

    //stResult.arData = evaluate(stResult.strData);  // this does not work
    //stResult.arData = evaluate("#stResult.strData#"); // nor does this

    writedump(stResult);
</cfscript>

我正在尝试获得看起来像 arInstant 的东西。

有没有比条带化[]、转换为列表、然后转换为数组更好的方法?

【问题讨论】:

  • 你没有说你使用的是哪个CFML引擎和版本,这可能很重要。 fwiw 您的代码在 Railo 4.0.2.000 中按预期工作
  • 使用带有多个分隔符的listToArray[,] 肯定会做到这一点。假设最初将其存储为字符串而不是数组是有充分理由的..
  • 我使用的是 Adob​​e CF 9.02
  • deserializeJson(Result.Data) ?
  • @PeterBoughton :要采用这种方法,它必须类似于deserializeJSON("{myData:#strData#}").myData

标签: coldfusion coldfusion-9


【解决方案1】:

您的数据是 JSON 字符串,因此请使用 deserializeJson() 将其转换为数组。

用法:

Result.Data = deserializeJson(Result.Input);

【讨论】:

    【解决方案2】:

    evaluate() 通常应避免使用(参考:123)。试试看怎么样:

    stResult.arData = ListToArray(stResult.strData, "[],");
    

    这将整个字符串视为一个列表,可能的分隔符为[],

    它应该给你一个包含 6 个元素的数组。

    当然,你的stResult.arInstant似乎已经有了你需要的东西……你想做什么?

    【讨论】:

    • [] 格式的字符串来自外部进程。 arInstant 是目标
    【解决方案3】:

    对于这个特定的问题,“

    有没有比条带化 []、转换为列表、然后转换为数组更好的方法?"

    实际上,一旦去掉方括号,它就是一个列表,因此少了一步。

    【讨论】:

      猜你喜欢
      • 2013-09-01
      • 2022-01-25
      • 1970-01-01
      • 2020-04-20
      • 1970-01-01
      • 1970-01-01
      • 2018-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多