我有一个REST服务,它返回一个带字符串的JSON。该字符串是多个单词的聚合。组合这些字符串时,我使用'/'稍后将其拆分为分隔符。
e.g: - 我得到的json字符串--AAA / BBB / CCC(我正在从DB中读取这些值)
在UI中,我从分隔符'/'中查找该字符串,我将其引入业务逻辑。
我的问题是我引入的分隔符'/'是用户甚至可以输入的内容。因此,举例来说,如果用户也将'/'输入到其中一个字符串中,那么我的JSON就像下面那样
例如: - AAA / BBB / CC / C(/用户输入两个C后)
然后我的字符串拆分逻辑错了,因为我也使用相同的值来拆分字符串
处理这类问题的理想方法应该是什么。我正在使用.NET C#
理想情况下,我想要一种方法来组合我的字符串并根据最终用户永远不会输入的东西拆分字符串
答案 0 :(得分:4)
一种选择是不将集合存储为标量值。您可以使用一对多关系在数据库中对此进行建模,或者您可以将该集合序列化为XML,并将其存储在单个列中。
答案 1 :(得分:1)
请不要使用字符串来表示数组。您应该返回JSON ['First', 'Second', 'Third', 'etc']
。您可以使用任何JSON库从C#生成它(如果您使用MVC3,则可以轻松地return Json(...)
数组。)
就Javascript而言,你会得到一个可以轻松使用的数组。另外,发回它应该很容易。
答案 2 :(得分:1)
而不是重新发明轮子,并编写自己的序列化代码。为什么不使用标准JSON库为您进行序列化。
JSON已经满足了数组或集合的概念,旨在逃避自己的分隔符。没有必要将您自己的专有格式添加到某些标准JSON的中间。
This question已经处理了JSON序列化程序选择问题。
只需将字符串存储在对象上IEnumerable<string>
即可。无论如何,他们可能会从你的数据模型中走出来。
答案 3 :(得分:0)
在'/'前添加'/'。额外的'/'表示你应该把它作为char而不是分隔符标志处理。您可以使用regex
进行拆分答案 4 :(得分:0)
你可以做点什么,用
组合字符串字符串S ='AAA','BBB','CCC'
比你可以编写的代码
string [] ary = S.Replace(“|”,“Pipe;”)。替换(“','”,“|”)。分割('|') ary [0] = ary [0] .Replace(“Pipe;”,“|”)
答案 5 :(得分:0)
如果您正在POST或PUTting此字符串,那么根本不要像这样滚动您自己的编码。我们已经定义了XML和JSON,虽然人们可以无休止地争论他们的利弊,但他们都工作,所以使用其中一个。
如果你在URI中使用这个字符串(当它自然是GET时更好的选择,更糟糕的是当它不是容易出错的时候选择它),那么application / x-www-form- urlencoded正好用于这个用途:item=AAA&item=BBB&item=CCC
来自&
和=
来自非uri编码,但任何&
或=
(以及任何%
以正常方式编码的URI中限制的其他字符(计算字符的UTF-8并在=
之后添加每个八位字节的值,例如%3D
为ë
,{ {1}}为%C3%AB
,依此类推。
如果你真的需要坚持你的基本方法,那么U + 001F是一个控制角色,传统上的目的是分离最低级别的字段(U + 001E,U + 001D和U + 001C越来越多地使用更高级别的分离字段组)并且没有出现在大多数键盘上(任何人都足够书呆子和老派用键盘设置来键入它们,期望它们分开字段)。我不建议将20世纪60年代的方法用于2012年的问题,但如果你可以避免它(尽管我认为美国的计算机仍然是约翰逊总统要求支持这些角色的!)
对于Ada Lovelace的爱,如果你可以完全避免它,不要将编码的字符串存储在数据库中(除了可能只是记录记录表以记录为诊断目的而发送的日志) 。将数据库中的单独字段存储为单独的字段。规范化是20世纪60年代的方法, 在2012年仍然具有相关性。