2016-02-29 125 views
0

在c#中,我試圖解析以下格式的JSON。我只能使用下面的示例代碼來關閉它,但它非常不穩定。c#json解析格式

(我也不知道如何在Javascript中,這也是我需要做解析。)

JSON例如:

{"72": { "Rejected": true }, "271": { "PreApproved": true}} 

代碼示例:

List<SSKChanges> lstSSK = new List<SSKChanges>(); 
string sskSource = ""; 
string sskStatus = ""; 
bool sskStatusBool = false; 
int i = 0; 
int iList = 0; 
JsonTextReader reader = new JsonTextReader(new StringReader(jsonExample)); 
while (reader.Read()) 
{ 
    if (reader.Value != null) 
    { 
     if (i == 0) 
     { 
      int n; 
      bool isNumeric = int.TryParse(reader.Value.ToString(), out n); 
      if (isNumeric) 
      { 
       sskSource = reader.Value.ToString(); 
       i = 1; 
      } 
      else 
      { 
       sskStatus = reader.Value.ToString(); 
       i = 2; 
      } 
     } 
     else if (i == 1) 
     { 
      sskStatus = reader.Value.ToString(); 
      i = 2; 
     } 
     else 
     { 
      sskStatusBool = (bool)reader.Value; 
      i = 0; 
      sskSource = ""; 
      sskStatus = ""; 
      sskStatusBool = false; 
     } 
    } 
} 
+0

我假設你使用的是Json.Net。我想你應該看看[DeserializeObject](http://www.newtonsoft.com/json/help/html/SerializingJSON.htm)方法。另外,如果您使用的是Web API或者甚至是MVC方法,還有其他方法可以做到這一點。由於您沒有指定獲取JSON的位置,因此我假設它來自文件,因此您需要手動將其反序列化。 –

+0

請確保包含您的*預期*輸出內容。有關更多信息,請參閱此處:http://www.stackoverflow.com/help/mcve –

回答

1

假設您已經在使用(正如您使用JsonTextReader所建議的那樣),您可以將您的JSON加載到JObject,然後query生成的對象與LINQ to JSON

例如,如果給定類:

public class SSKChanges 
{ 
    public string SskSource { get; set; } 
    public string SskStatus { get; set; } 
    public bool? SskStatusBool { get; set; } 
} 

你可以這樣做:

 var obj = JObject.Parse(jsonExample); 
     var lstSSK = (from property in obj.Properties() 
         select new SSKChanges 
         { 
          SskSource = property.Name, 
          SskStatus = property.Value.Children<JProperty>().Select(p2 => p2.Name).FirstOrDefault(), 
          SskStatusBool = property.Value.Children<JProperty>().Select(p2 => (bool?)p2.Value).FirstOrDefault() 
         }).ToList(); 

至於你的問題的第二個問題,我也不知道如何在JavaScript解析,我也需要這樣做,你應該問第二個問題專門針對JavaScript專家。

0

由於你已經在使用Json.net,我會這樣做:

string json = @"{""72"": { ""Rejected"": true }, ""271"": { ""PreApproved"": true}}"; 
var jobj = JObject.Parse(json); 

foreach (var entry in jobj.Children().Cast<JProperty>()) 
{ 
    var kv = entry.Value.First() as JProperty; 
    Console.WriteLine(entry.Name + "=>" + kv.Name + ":" + kv.Value); 
}