如果 JSON 文件中存在重复值,如何检查并引发异常



My JSON 文件:

[
  {
    "nome": "Marcos",
    "pontos": 12,
    "acesso": "2016-04-22T21:10:00.2874904-03:00"
  },
  {
    "nome": "Felipe",
    "pontos": 12,
    "acesso": "2016-04-22T21:10:00.2904923-03:00"
  },
  {
    "nome": "Augusto",
    "pontos": 15,
    "acesso": "2016-04-22T21:10:00.2909925-03:00"
  },
  {
    "nome": "Augusto",
    "pontos": 12,
    "acesso": "2016-04-22T21:10:00.2909925-03:00"
  }
]

"nome"值必须都是唯一的;我应该进行哪种扫描? 浏览数组并进行比较以查看它是否已存在?我目前正在使用Newtonsoft.Json;这有什么辅助功能吗?

如果存在重复值,生成异常的一种简单方法是尝试将它们放入字典中:

JArray array = JArray.Parse(json);
// This will throw an exception if there are duplicate "nome" values.
array.Select(jt => jt["nome"]).ToDictionary(jt => (string)jt);

这是一个工作演示:https://dotnetfiddle.net/FSuoem

假设你有一个 JSON 输入的模型,如下所示:

public class Model {
    public string Nome { get; set; }
    public string Pontos { get; set; }
    public DateTime Acesso { get; set; }
}

确定是否找到重复项变得非常容易。

var deserialized = JsonConvert.DeserializeObject<List<Model>>(json);
if (deserialized.Select(x => x.Nome).Distinct().Count() != deserialized.Count) {
    throw new Exception("Duplicate names found");
}

如果反序列化列表中的对象数不等于我们从同一列表中选择的不同名称的数量,我们知道存在重复项。

你的问题非常具体。因为您首先需要对 JSON 数据进行分析。我建议您使用 System.Collections.Generic.HashSet 来验证此类规则。

//...
// Here you do your Json parse with you library:
//Then you need to iterate into the object adding those name values into a HashSet:
System.Collections.Generic.HashSet<String> names = new System.Collections.Generic.HashSet<string> ();
foreach (string name in ITERATE_HERE) {
    if (names.Contains (name)) {
        throw new System.ArgumentException("The name value need to be unique.", "some rule");
    }
    names.Add (name);
}
//...

所以,我希望五月能帮助你。

相关内容

  • 没有找到相关文章

最新更新