3

我有一个 REST 服务,它返回一个带有字符串的 JSON。该字符串是几个单词的聚合。组合这些字符串时,我使用“/”稍后将其拆分为分隔符。

例如:- 我得到的 json 字符串- AAA/BBB/CCC(我正在从数据库中读取这些值)

在 UI 中,我从分隔符“/”中吐出这个字符串,我引入该分隔符以提出业务逻辑。

我的问题是我引入的分隔符“/”是用户甚至可以输入的东西。因此,例如,如果用户也将“/”输入到其中一个字符串中,那么我的 JSON 将如下所示

例如:- AAA/BBB/CC/C(/在用户输入两个 C 之后)

然后我的字符串拆分逻辑是错误的,因为我也使用相同的值来拆分字符串

处理此类问题的理想方法应该是什么。我使用.NET C#

理想情况下,我想要一种方法来组合我的字符串并根据最终用户永远不会输入的内容拆分字符串

4

6 回答 6

4

一种选择是不将集合存储为标量值。您可以使用一对多关系在数据库中对此进行建模,或者您可以将集合序列化为 XML,并将其存储在单个列中。

于 2012-08-14T09:35:12.307 回答
1

请不要使用字符串来表示数组。您应该返回一个 JSON ['First', 'Second', 'Third', 'etc']。您可以使用任何 JSON 库从 C# 生成它(如果您使用 MVC3,您可以轻松地return Json(...)创建一个数组)。

就 Javascript 而言,您会得到一个可以轻松使用的数组。此外,将其发回应该很容易。

于 2012-08-14T09:38:31.807 回答
1

而不是重新发明轮子,编写自己的序列化代码。为什么不使用标准 JSON 库为您进行序列化。

JSON 已经迎合了数组或集合的概念,并且旨在逃避其自己的分隔符。无需将您自己的专有格式添加到某些标准 JSON 的中间。

这个问题已经处理了 JSON 序列化程序选择问题。


只需将对象上的字符串存储为 some IEnumerable<string>。无论如何,它们可能都是从您的数据模型中出来的。

于 2012-08-14T09:46:44.080 回答
0

如果您要发布或放置此字符串,则根本不要像这样滚动您自己的编码。我们已经定义了 XML 和 JSON,尽管人们可能会无休止地争论它们的优缺点,但它们都可以工作,所以请使用其中之一。

如果您在 URI 中使用此字符串进行 GET(当它自然是 GET 时这是一个更好的选择,如果不是,则更糟糕到容易出错的选择),那么 application/x-www-form-urlencoded 很好为这个用途定义:item=AAA&item=BBB&item=CCCand &from=不是 uri 编码的,而是任何&or =(以及任何其他在 URI 中受限的字符)以正常方式编码(计算出字符的 UTF-8 并添加每个八位字节的值在%so eg =is %3D, ëis%C3%AB等之后。

如果你真的需要坚持你的基本方法,那么 U+001F 是一个控制字符,传统上用于在最低级别分隔字段(U+001E、U+001D 和 U+001C 被用于越来越高的级别分隔字段组)并且不会出现在大多数键盘上(并且任何书呆子和老派的人都设置了键盘来键入它们,希望它们分隔字段)。如果可以避免的话,我不建议采用这种 1960 年代的方法来解决 2012 年的问题(尽管我认为美国的计算机仍然由约翰逊总统授权支持这些角色!)

并且出于对 Ada Lovelace 的喜爱,如果可以避免的话,不要将编码的字符串存储在数据库中(可能在一个日志表中,它只是为了记录为诊断目的而发送的日志)。将单独的字段存储在数据库中,作为单独的字段。标准化是 1960 年代的方法,在 2012 年仍然适用。

于 2012-08-14T09:59:34.833 回答
0

在“/”之前添加一个“/”。额外的“/”很好地表明您应该将其作为字符处理,而不是分隔标志。你可以用正则表达式做的分裂

于 2012-08-14T09:35:32.273 回答
0

你可以做类似的事情,使用组合字符串

字符串 S='AAA','BBB','CCC'

比你可以写的代码

string[] ary=S.Replace("|","Pipe;").Replace("','","|").Split('|') ary[0] = ary[0].Replace( "管道;","|")

于 2012-08-14T09:41:52.057 回答