【问题标题】:Mapping arrays to strings efficiently in JavaScript在 JavaScript 中有效地将数组映射到字符串
【发布时间】:2013-04-17 01:38:33
【问题描述】:

我想使用 AJAX 加载数据而不将其格式化为 JSON,所以我自己对其进行了编码。

数据是客户记录:井号 (#) 分隔客户记录,管道符号 (|) 分隔客户数据的字段,克拉符号 (^) 分隔字段名称字段的值。

所以,我有这样的东西(简体):

name^James|email^somemail@gmail.com#name^Bary|email^bary@bary.com#...

当将此数据加载到 Javascript 中时,我想将其制成二维数组,如下所示:

clients = [
['name'=>'James','email'=>'somemail@gmail.com'],
['name'=>'Bary','email'=>bary@bary.com]
]

... 或者是对象格式的东西。如何最好地做到这一点?

【问题讨论】:

  • 为什么不能使用 JSON?
  • 使用JSON应该没有问题。
  • @Yaakov 有什么问题?将文档的编码设置为 UTF-8,您应该能够很好地显示它们。
  • @Yaakov 我真的认为你的“X 问题”是可以解决的,因为我在 UTF-8 中一直通过 JSON 传送非 ASCII 数据,就像很多很多一样,许多网站,其中一些很可能是用 PHP 编写的。别客气。 (现在,如果您在实际解决它时需要帮助,您必须提出一个适当的问题,其中涉及精确定位数据损坏的确切位置。即在什么字符串->字节编码/输出步骤是否已知测试字符串的结果字节数组与预期不匹配。)

标签: javascript ajax arrays json


【解决方案1】:

请注意,您不能在键或值中使用特殊字符(|、^、#)。如果您决定对它们进行编码,那么您可能可以使用 JSON。所以我真的推荐 JSON,这样你就不必自己做任何事情了。

如果您决定不支持包含 (|,^,#) 的键和值,则可以使用 javascript 拆分功能。像这样的东西(我还没有运行过):

var output=[];
var clients = input.split("#");

for (var client in clients)
{
  var outputClient={}
  var clientProps = client.split('|');
  for (var propPair in clientProps)
  {
     var propPairVal = propPair.split('^');
     outputClient[propPairVal[0]] = propPairVal[1];  
  }
  output.push(outputClient);
}

但是,我真的推荐 JSON。它将更加灵活且不易出错。

【讨论】:

  • 谢谢。不幸的是,我不能使用 Json。我还可以使用哪些其他标志?
  • @Yaakov:因此,您没有弄清楚如何正确使用 JSON,而是通过编写自己的格式让自己陷入困境?
猜你喜欢
  • 2012-01-23
  • 2016-10-15
  • 2021-11-15
  • 2012-07-24
  • 1970-01-01
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
  • 2019-07-27
相关资源
最近更新 更多