2015-11-30 3 views
0

У меня есть действующий JSON, и мне нужно пропустить результаты. Я использую JSON.NET и C#. Я могу получить значение для УСПЕХА, но я не знаю, как получить доступ. Любые рекомендации будут полезны.Петля через результаты JSON с использованием JSON.NET

{ 
    "SUCCESS": 1, 
    "ERRMSG": "", 
    "COLUMNSANDDATA": { 
     "COLUMNS": ["LASTNAME", "FIRSTNAME", "EMAILADDRESS", "COURSENAME", "PROGRAMID", 
        "ENROLLMENTSTARTDATE", "COMPLETIONDATE", "GRADE", "SCORE", 
        "PASSED_NOTPASSED", "TYPEOFCREDITS", "CREDITSEARNED", "INSTRUCTORNAME", 
        "INSTRUCTOREMAILADDRESS", "CLIENTNAME", "COMMUNITYNAME", 
        "CERTIFICATESENTDATE", "DURATIONTYPE", "DURATIONMINUTES", 
        "LOGIN"], 
     "DATA": [ 
      ["Beane", "Coffee", "[email protected]", "Program with One Essay Test", null, 
      "January, 06 2014 18:06:56", "January, 06 2014 18:57:53", "Incomplete", null, 
      "Not Passed", "Musical Note", 0.00, "Ray Bradbury", "[email protected]", 
      "Hogarth's Flying Circus", "Captain's Club", null, null, null, 
      "[email protected]"], 
      ["Beane", "Navy", "[email protected]", "Program with One Essay Test", null, 
      "January, 06 2014 18:06:56", "January, 06 2014 18:36:39", "Pass", 95.00, 
      "Passed", "Musical Note", 1.00, "Ray Bradbury", "[email protected]", 
      "Hogarth's Flying Circus", "Captain's Club", "January, 06 2014 08:00:00", 
      null, null, "NavyB"] 
     ] 
    } 
} 

Я смог получить УСПЕХА значение с помощью этого блока кода

using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
{ 
    var result = streamReader.ReadToEnd(); 

    var deserializer = new JavaScriptSerializer(); 
    var jsonObj = (IDictionary<string, object>)deserializer.DeserializeObject(result); ; 

    Response.Write((string)jsonObj["SUCCESS"]); 
} 
+0

Вы уверены, что вы используя [Json.Net] (http://www.newtonsoft.com/json)? ['JavaScriptSerializer'] (https://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer (v = vs.110) .aspx) - это класс, предоставленный Microsoft (не часть от Json.Net). –

+0

Да. Я установил JSON.NET, так как многие примеры, которые я использовал, используют. Первоначально проект был создан с использованием только предоставленных MS библиотек классов. –

ответ

1

Что-то, как это должно работать, жаль, что это не тестировалось.

JArray data_list = (JArray)jsonObj["COLUMNSANDDATA"]["DATA"]; 

foreach (JObject data in data_list) { 
    string col_0 = (string)data[0]; 
} 
+0

«Невозможно применить индексирование с [] к выражению типа« объект », я вижу, что вы пытаетесь сделать, хотя, так как мне нужно только одно или два значения, это маршрут, который я собираюсь преследовать. –

0
  1. Cenerate class
  2. Deserialize к экземпляру этого класса

public class COLUMNSANDDATA 
{ 
    public List<string> COLUMNS { get; set; } 
    public List<List<object>> DATA { get; set; } 
} 

public class RootObject 
{ 
    public int SUCCESS { get; set; } 
    public string ERRMSG { get; set; } 
    public COLUMNSANDDATA COLUMNSANDDATA { get; set; } 
} 


var deserializer = new JavaScriptSerializer(); 
var jsonObj = deserializer.DeserializeObject<RootObject>(result); 

foreach(col in jsonObj.COLUMNSANDDATA.COLUMNS) 
{ 
    //... 
} 
+0

Действительно ли это необходимо если пользователь хочет, например, единственное свойство для каждого элемента? Представьте, что JSON был намного больше ... – Umair

+0

@Umair это зависит. Я не знаю всех требований. Итак, я показываю только один способ, как это сделать может быть решена.Код, Есть много случаев, когда мой ответ плох, но есть много, где это хорошо.И здесь, я думаю, это достаточно хорошо – Backs

0

Я настоятельно рекомендую вам использовать автогенерируемые классы для наиболее удобной навигации и использования theese классов.

Посмотрите на эту статью How to auto-generate a C# class file from a JSON object string, это поможет вам пройти автоматическую генерацию classe form json и xml. Кстати, это поможет вам в будущем.

var deserializer = new JavaScriptSerializer(); var jsonObj = deserializer.DeserializeObject<RootObject>(result);

0

Вы можете цикл через JSON и сбросить все вот так:

string json = @" 
{ 
    ""SUCCESS"": 1, 
    ""ERRMSG"": """", 
    ""COLUMNSANDDATA"": { 
     ""COLUMNS"": [""LASTNAME"", ""FIRSTNAME"", ""EMAILADDRESS"", ""COURSENAME"", ""PROGRAMID"", ""ENROLLMENTSTARTDATE"", ""COMPLETIONDATE"", ""GRADE"", ""SCORE"", ""PASSED_NOTPASSED"", ""TYPEOFCREDITS"", ""CREDITSEARNED"", ""INSTRUCTORNAME"", ""INSTRUCTOREMAILADDRESS"", ""CLIENTNAME"", ""COMMUNITYNAME"", ""CERTIFICATESENTDATE"", ""DURATIONTYPE"", ""DURATIONMINUTES"", ""LOGIN""], 
     ""DATA"": [ 
      [""Beane"", ""Coffee"", ""[email protected]"", ""Program with One Essay Test"", null, ""January, 06 2014 18:06:56"", ""January, 06 2014 18:57:53"", ""Incomplete"", null, ""Not Passed"", ""Musical Note"", 0.00, ""Ray Bradbury"", ""[email protected]"", ""Hogarth's Flying Circus"", ""Captain's Club"", null, null, null, ""[email protected]""], 
      [""Beane"", ""Navy"", ""[email protected]"", ""Program with One Essay Test"", null, ""January, 06 2014 18:06:56"", ""January, 06 2014 18:36:39"", ""Pass"", 95.00, ""Passed"", ""Musical Note"", 1.00, ""Ray Bradbury"", ""[email protected]"", ""Hogarth's Flying Circus"", ""Captain's Club"", ""January, 06 2014 08:00:00"", null, null, ""NavyB""] 
     ] 
    } 
}"; 

JObject root = JObject.Parse(json); 
JObject colsAndData = (JObject)root["COLUMNSANDDATA"]; 
JArray cols = (JArray)colsAndData["COLUMNS"]; 
foreach (JArray row in colsAndData["DATA"]) 
{ 
    for (int i = 0; i < row.Count; i++) 
    { 
     string colName = (string)cols[i]; 
     string value = (string)row[i]; 
     Console.WriteLine(colName + ": " + value); 
    } 
    Console.WriteLine(); 
} 

Выход:

LASTNAME: Beane 
FIRSTNAME: Coffee 
EMAILADDRESS: [email protected] 
COURSENAME: Program with One Essay Test 
PROGRAMID: 
ENROLLMENTSTARTDATE: January, 06 2014 18:06:56 
COMPLETIONDATE: January, 06 2014 18:57:53 
GRADE: Incomplete 
SCORE: 
PASSED_NOTPASSED: Not Passed 
TYPEOFCREDITS: Musical Note 
CREDITSEARNED: 0 
INSTRUCTORNAME: Ray Bradbury 
INSTRUCTOREMAILADDRESS: [email protected] 
CLIENTNAME: Hogarth's Flying Circus 
COMMUNITYNAME: Captain's Club 
CERTIFICATESENTDATE: 
DURATIONTYPE: 
DURATIONMINUTES: 
LOGIN: [email protected] 

LASTNAME: Beane 
FIRSTNAME: Navy 
EMAILADDRESS: [email protected] 
COURSENAME: Program with One Essay Test 
PROGRAMID: 
ENROLLMENTSTARTDATE: January, 06 2014 18:06:56 
COMPLETIONDATE: January, 06 2014 18:36:39 
GRADE: Pass 
SCORE: 95 
PASSED_NOTPASSED: Passed 
TYPEOFCREDITS: Musical Note 
CREDITSEARNED: 1 
INSTRUCTORNAME: Ray Bradbury 
INSTRUCTOREMAILADDRESS: [email protected] 
CLIENTNAME: Hogarth's Flying Circus 
COMMUNITYNAME: Captain's Club 
CERTIFICATESENTDATE: January, 06 2014 08:00:00 
DURATIONTYPE: 
DURATIONMINUTES: 
LOGIN: NavyB 

Fiddle: https://dotnetfiddle.net/B7bMEe

Смежные вопросы