2014-12-02 57 views
2

我有一個大的json文件,它有5個子節點,其中4個是對象,另一個是數組。解析包含數組和對象的json文件

當我通過它們循環時,我用下面的代碼打開了數組,它失敗了,抱怨對象不是'jObject'類型。如果我把JArray修復它,但我不知道如何預先檢查如果json是jObject或jArray?

for (int i = 0; i < jsonChildObjectsArray.Length; i++) 
{ 
    string jsonCategoryContents = json[jsonChildCategorysArray[i]].ToString(); 
    jsonChildObjectsArray[i] = jsonCategoryContents;   
    JObject jsonCategoryObject = JObject.Parse(jsonCategoryContents); 
      //error's here on 5th element as it is a jArray type. 
} 
+0

你可以做一個類車型的整個文件?然後讓解析器完成確定如何解碼它的工作? – gmlacrosse 2014-12-02 17:07:02

+0

不幸的是,我能想到的最多的是它的結構良好。 – Fearghal 2014-12-02 17:12:59

+0

@ Fearghal,如果真的如此,那麼我會分解成多個步驟。解析你自己可能或不可能形成的字符串。您可以將其解析爲JSON,然後使用解析器,或者僅將它自己解析爲您需要的目標對象。如果你不能真正依靠模式是正確的,甚至是內容形式良好,那麼使用那些期望的工具將永遠是非常令人沮喪的。 – overslacked 2014-12-02 17:20:54

回答

2

你可以使用JToken.Parse代替:

JToken token = JToken.Parse(jsonCategoryContents); 

if (token.Type == JTokenType.Object) 
{ 
    JObject jsonCategoryObject = token.ToObject<JObject>(); 
} 
else if (token.Type == JTokenType.Array) 
{ 
    JArray jsonCategoryArray = token.ToObject<JArray>(); 
} 
+0

精彩的回答。 – Fearghal 2014-12-02 17:29:19

+1

@ Fearghal:謝謝,很高興幫助 – 2014-12-02 17:43:53