2012-06-26 106 views
1

如何解析使用JSON.net以下JSON數據LIB解析JSON數據的lib

Root: { 
    "data": [ 
    { 
     "name": "query1", 
     "fql_result_set": [ 
     { 
      "thread_id": "1920370693067", 
      "updated_time": 1340656102, 
      "subject": "", 
      "snippet": "Test", 
      "snippet_author": 100002153560476 
     } 
     ] 
    }, 
    { 
     "name": "query2", 
     "fql_result_set": [ 
     { 
      "uid": 100002153560476, 
      "name": "Santosh Singh" 
     } 
     ] 
    } 
    ] 
} 
    Type: Property 

我嘗試下面的代碼,但沒能獲得數據

JObject j = JObject.Parse(jsonResult); 
JArray data = (JArray)j["data"]; 

if (data != null) 
     { 
      foreach (var item in data[1]["fql_result_set"].Values()) 
      { 

       string innerText = item["name"].ToString(); 

       string str2 = item["uid"].ToString(); 
       dictionary[str2] = innerText; 
      } 
      foreach (var item in data[0]["fql_result_set"].Values().AsJEnumerable()) 
      { 
       FacebookMessage message; 
       message.threadId = item["thread_id"].ToString(); 
       message.updatedTime = item["updated_time"].ToString(); 
       message.subject = item["subject"].ToString(); 
       message.snippet = item["snippet"].ToString(); 
       message.snippetAuthorId = item["snippet_author"].ToString(); 
       message.snippetAuthorName = dictionary[message.snippetAuthorId]; 
       allMessages.Add(message); 
      } 
} 

回答

2

第一你所有的json字符串都不完整。我試圖將其轉換爲一個有效的爲:

{ 
    "Root": { 
     "data": [ 
      { 
       "name": "query1", 
       "fql_result_set": [ 
        { 
         "thread_id": "1920370693067", 
         "updated_time": 1340656102, 
         "subject": "", 
         "snippet": "Test", 
         "snippet_author": 100002153560476 
        } 
       ] 
      }, 
      { 
       "name": "query2", 
       "fql_result_set": [ 
        { 
         "uid": 100002153560476, 
         "name": "Santosh Singh" 
        } 
       ] 
      } 
     ] 
    } 
} 

enter image description here

並解析爲:

dynamic dynObj = JsonConvert.DeserializeObject(json); 
foreach(var data in dynObj.Root.data) 
{ 
    Console.WriteLine("{0}",data.name); 
    foreach(var fql in data.fql_result_set) 
    { 
     foreach (JProperty keyValue in fql) 
     { 
      Console.WriteLine("\t{0} : {1}", keyValue.Name,keyValue.Value); 
     } 
    } 
} 
+0

我正在上線的foreach空refrence異常(在dynObj.Root VAR數據。數據) –

+0

@geek我向你展示了我試圖解析的json。你發佈的json字符串是無效的。例如,「Type:Property」是什麼意思?第一個'{'? 。檢查你的json字符串。 –

+0

dynObj.data工作完美....謝謝 –