2017-02-27 67 views
1

我有JSON文件,我想在C#中提取某个字段名称消息的值。到目前为止,我编写了一个c#控制台应用程序,但LINQ to JSON代码不适用于WHERE条件。C#Linq to json如何提取包含特定值的属性

using (StreamReader lire = File.OpenText(@"filepath")) 
     { 
      JObject o = (JObject)JToken.ReadFrom(new JsonTextReader(lire)); 


      var liste = from x in o["messages"] 
         where x["message"].Contains("photo") 
         select x["message"]; 
      foreach (var x in liste) 
      { 

       Console.WriteLine(x); 
      } 

      Console.ReadKey(); 
     } 

这里的样品的JSON FILE

{ 
    "message": "[Debug][CollectCtrl] Location Saved", 
    "type": "debug", 
    "date": 1488152282281 
}, 
{ 
    "message": "[Debug]INSERT INTO photo (location_id, lat, lng, json, filename, heading) VALUES (15,0, 0,'{}', 'file:///storage/emulated/0/Pictures/IMG_20170226_163727.jpg',0)", 
    "type": "debug", 
    "date": 1488152282285 
}, 
{ 
    "message": "[Debug]INSERT INTO photo (location_id, lat, lng, json, filename, heading) VALUES (15,0, 0,'{}', 'file:///storage/emulated/0/Pictures/IMG_20170226_163718.jpg',0)", 
    "type": "debug", 
    "date": 1488152282289 
}, 
{ 
    "message": "[Debug]Photo saved.28", 
    "type": "debug", 
    "date": 1488152282439 
}, 
+0

,我得到了一个错误说JSON格式不正确。 – Sameer

+0

我发布的示例位于数组命名消息的内部: –

+0

请注意我的代码从'JObject'到'JArray'的更改。希望对你有效。 – Sameer

回答

0

这是工作的代码。

using (var sr = File.OpenText(@"C:\Users\sranade\documents\visual studio 2015\Projects\AccessModifiers\AccessModifiers\sample.json")) 
     { 
      var o = (JArray)JToken.ReadFrom(new JsonTextReader(sr)); 
      foreach (var obj in o.Children<JObject>()) 
      { 
       foreach (var p in obj.Properties()) 
       { 
        if (p.Name.Contains("message") && p.Value.ToString().Contains("photo")) 
        { 
         Console.WriteLine(p.Value.ToString()); 
        } 
       } 
      } 
     } 

的下面的代码当我试图验证样本JSON文件使用LINQ to JSON

var messageList = o.Select(x => x["message"]).Where(x => x.ToString().Contains("photo")).ToList(); 
      foreach (var message in messageList) 
      { 
       Console.WriteLine(message); 
      }