2016-08-05 1 views
1

Я этот код, который извлекает поля из JSON:запросов (тип SQL) на JSON

@{ 
var strQuery = "SELECT * FROM Prod ORDER BY IdSpec ASC, NameSpec ASC"; 

var db = Database.Open(App.connDatabase); 
var data = db.Query(strQuery); 
var json = Json.Encode(data); 
Response.Write(json); 


var DecodifEsJson = Json.Decode(json); 

foreach (var decod in DecodifEsJson) 
{ 

    <p> 
     <strong>@decod.IdSpec</strong><br /> 
     @decod.NameSpec<br /> 
    </p> 
} 

}

выход

JSon код:

[{"IdSpec":1,"IdSpecPar":null,"NameSpec":"Spec"},{"IdSpec":10,"IdSpecPar":0,"NameSpec":"BiClassif"},{"IdSpec":4,"IdSpecPar":0,"NameSpec":"BiCol"},{"IdSpec":2,"IdSpecPar":0,"NameSpec":"St"},{"IdSpec":3,"IdSpecPar":2,"NameSpec":"36 m "},{"IdSpec":6,"IdSpecPar":4,"NameSpec":"Bi"},{"IdSpec":5,"IdSpecPar":4,"NameSpec":"Ro"},{"IdSpec":8,"IdSpecPar":4,"NameSpec":"Sc"},{"IdSpec":11,"IdSpecPar":10,"NameSpec":"Ab"}] 

Вопрос: есть ли способ применить запрос, похожий на SQL, на «фильтр» JSON?

Например:

выбрать только все поля с "IdSpecPar" = 0:

[{"IdSpec":10,"IdSpecPar":0,"NameSpec":"BiClassif"},{"IdSpec":4,"IdSpecPar":0,"NameSpec":"BiCol"},{"IdSpec":2,"IdSpecPar":0,"NameSpec":"St"}] 

и т.д ...

Спасибо всем!

ответ

0

десериализации JSON в класс коллекции и использовать LINQ для запроса желаемого результата .:

/*create the class in Model*/ 

    public class jObject 
     { 
      public string IdSpecPar { get; set; } 
      public int IdSpec { get; set; } 
      public string NameSpec { get; set; } 
     } 

/* view */  
@{ 
     var strQuery = "SELECT * FROM Prod ORDER BY IdSpec ASC, NameSpec ASC"; 

     var db = Database.Open(App.connDatabase); 
     var data = db.Query(strQuery); 
     var json = Json.Encode(data); 

     var jsonColl = Newtonsoft.Json.JsonConvert.DeserializeObject<List<jObject>>(json); 
     var result = from r in jsonColl 
        where r.IdSpec == 0 
        select r; 


     foreach (var item in result) 
     { 

     <p> 
     <strong>@item.IdSpec</strong><br /> 
     @item.NameSpec<br /> 
     </p> 
     } 
    } 
+0

Здравствуйте, JBaby, и спасибо за ваш интерес! Можете ли вы привести пример? Заранее благодарим! –

+0

Я отредактировал свой ответ на примере. Пожалуйста, дайте мне знать, если возникнут какие-либо дальнейшие вопросы. – JBaby

+0

Невозможно сделать все в бритве? Без «Get/set»? –

0

Попробуйте это. Добавить класс для размещения JSON

public class SomeClass 
{ 
    public int IdSpec { get; set; } 
    public int IdSpecPar { get; set; } 
    public string NameSpec { get; set; } 
} 

Теперь сериализуем это следующим образом.

var json = Json.Encode(data); 
var ser = new System.Web.Script.Serialization.JavaScriptSerializer(); 
var data = ser.Deserialize<List<SomeClass>>(json); 
Смежные вопросы