在c#中搜索JSON数组中的文本

时间:2015-11-19 12:19:23

标签: c# json linq linq-to-json

我正在实现简单的搜索引擎。所有数据都保存为文本文件中的JSON。我的实现方案是,如果我搜索像'rock'这样的单词方法应该返回结果作为包含'rock'值的标签ID的列表。我一直在寻找示例代码但是在每个例子中他们按标签搜索如track_id“但我需要搜索按价值。 这是我的示例JSON数组..

enter image description here

测试词:摇滚 预期成果:991335,991336,991337

1 个答案:

答案 0 :(得分:1)

我建议使用JSON库,如Json.net。

如果你可以允许阅读整个文件,那么使用linq就可以轻松了。

class TrackElement {
    public Track Track {get;set;}
}
class Track {
    public string track_id{get;set;}
    public string track_name{get;set;}
    public string track_category{get;set;}
}

读取文件,反序列化并搜索:

var data = File.ReadAlltext("path/to/your/file.txt");
List<TrackElement> database = JsonConvert.DeserializeObject<List<TrackElement>>(data);

var results = database.Where(i=>i.Track.track_category.ToLower().Contains("rock")).Select(t=>t.Track.track_id);

如果数据库非常大,则不应将整个内容读入内存,在这种情况下,您可以使用流式解析(token-by-token),直接读取文件。为此,您可以使用Json.net lib中的JsonReader类。 (http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_JsonReader.htm