我有一个字符串如下。
{{"sId":"HSFJFKJ.dsfhshd","min":"AKK213AD23456","info":"text"},
{"sId":"HSFJFKJ.dsd7shd","min":["BKK213ACD23456","BKK213AB1CD23456"],"info":"text"},
{"sId":"HSFJFKJ.dsdf7shd","min":"BKK213AB1CD23456","info":"text"},
{"sId":"HSFJFKJ.dsdd7shd","min":"CKK213AB1CD23456","info":"text"}}
如果您看到“min”值有时是单一的,有时会重复。 因此,我想删除重复的“最小”值。它必须是单一的价值。
所以我想解析完整的字符串(非常长的字符串),并查找“min”是否有多个值。如果它有多个值,则将其替换为单个值。
示例:
替换:
"min":["BKK213AB1CD23456","BKK213AB1CD23456"]
使用:
"min":"BKK213AB1CD23456"
在C#中寻找任何简单的解决方案。
答案 0 :(得分:1)
这是一个直接的正则表达式解决方案。任何单个“min”值都将保持不变,而倍数将减少到第一个值。
Regex.Replace(input, "\"min\":\\[(\"[A-Z\\d]+\").+?\\]", "\"min\":$1");
<强>故障:强>
\[
和\]
匹配文字括号("[A-Z\d]+")
匹配引号中的字符串并捕获组.+?
匹配结束括号$1
引用捕获组答案 1 :(得分:0)
将课程设为以下
public class Data
{
public int SId { get; set;}
public HashSet<string> hashsetMinValues { get; set;}
public string Info { get; set;}
public List<Data> ReadData()
{
//Read you object in list of data i.e List<Data>
}
}
当您在hashset中添加min
值时,hashset将自行删除重复值
希望这有帮助。
答案 2 :(得分:0)
我认为这是你能做的最好的事情。
void Main()
{
var inputStr = @"[{'sId':'HSFJFKJ.dsfhshd','min':'AKK213AD23456','info':'text'},
{'sId':'HSFJFKJ.dsd7shd','min':['BKK213AB1CD23456','BKK213AB1CD23456'],'info':'text'},
{'sId':'HSFJFKJ.dsdf7shd','min':'BKK213AB1CD23456','info':'text'},
{'sId':'HSFJFKJ.dsdd7shd','min':'CKK213AB1CD23456','info':'text'}]";
inputStr = inputStr.Replace("'min':'","'min':['").Replace("','info'","'],'info'");
var dest = JsonConvert.DeserializeObject<test[]>(inputStr);
var finalList = dest.Select(d => new test() { sId=d.sId,min=d.min.Distinct().ToArray(),info=d.info });
//This will have your final string
var output = JsonConvert.SerializeObject(finalList);
}
// Define other methods and classes here
public class test
{
public string sId { get; set; }
public string[] min { get; set; }
public string info { get; set; }
}