2016-02-29 53 views
-1

我試圖檢查是否在json中有一定的屬性。Json返回空間

{[ 
{ 
    "trace": { 
     "details": { 
     "data": "[29-02-2016 17:37:32.931751]", 
     "type": "[info]", 
     "text": "[Done.]" 
     }, 
     "context": { 
     "context": [ 
      [ 
      { 
       "ID": "John Dillinger" 
      } 
      ] 
     ] 
     } 
    } 
    } 
]} 
x變量

我已刪除了空間,最後的結果是::其實我能做到這一點通過以下方式:作爲

var container = (JContainer)JsonConvert.DeserializeObject(responseText); 
var x = container.ToString(Formatting.None); 
var message = container["text"]; 

現在變量responseText返回

"[{\"trace\":{\"details\":{\"data\":\"[29-02-2016 17:37:32.931751]\",\"type\":\"[info]\",\"text\":\"[Done.]\"},\"context\":{\"context\":[[{\"ID\":\"John Dillinger\"}]]}}}]" 

現在,如果找不到密鑰,我會得到null

if (message == null) 
{ 
     return responseText; 
} 

的問題是,我執行檢查的message可變的條件,如果在container(未格式化),該場所,問題是,我得到這個異常:

{「訪問具有無效鍵值的JArray值:\「text \」。 INT32數組索引的預期。「}

但如果我用斜槓第二JSON更換container所有的工作好。現在我的問題是,我不能執行var message= x["text"];「事業x是一個字符串。因此,如何我可以在JSON刪除空間,並檢查是否包含text關鍵?

+0

爲什麼不直接從'container'看了嗎?我不明白爲什麼你需要刪除所有的空白之前閱讀該屬性? –

+0

@JamesThorpe'因爲如果我從容器中讀取我得到:'{「訪問JArray值與無效鍵值:\」文本\「。Int32數組索引預期。」}'特別是似乎鑄造'JContainer'增加空間打破了JSON。相反,如果我用一個包含json的示例變量來取代我得到的實現結果,但我需要從包含該請求的變量中獲取它。 – Sandokan

+1

你是否意識到你真的什麼都不做? x是你去除空間的地方,但你不用它來做任何事情...... – Gusman

回答

1

它看起來就像當你刪除的空間,你也改變了第一架的訂單在第一個例子你的第一個括號{[,在第二他們是[{

在json中,排序有所作爲。 {}表示對象,[]表示數組。 [{"data":"value"}]是合法的,因爲你說你有一個對象的數組。 {["value"]}不合法,因爲您的對象沒有數組的名稱。法律版本是{ "data":["value"] }

Here是一個方便的網絡工具來驗證您的JSON語法

+0

這不是語法問題,因爲在其他類中我可以正確反序列化json。這是導致異常的反序列化問題。 – Sandokan

+0

我將他的JSON粘貼到JSONLint中,它回來後有效? – dman2306

+0

@ dman2306 json是有效的..它是一個簡單的對象數組。 – Sandokan