2013-08-19 33 views
3

這是一個非常簡單的問題,但似乎無法找到直接答案。我讀了一個JSON對象。然後我想解析它,並且能夠直接處理一個標記或一個值,然後格式化它來編寫一個文件輸出,我將在另一個應用程序中使用它。我正在使用C#和Newtonsoft庫。使用c#解析並迭代通過json對象來解決每個字段

我的代碼:

JsonTextReader reader = new JsonTextReader(re); 
while (reader.Read()) 
{ 
    if (reader.Value != null) 
    Console.WriteLine("Value: {0}", "This is the value <Tags>: " + reader.Value); 
} 

我怎樣才能解決每個行?例如,desc,然後獲取對遊戲世界的引用。這必須是如此commoplace。

感謝,

johnh

+0

請與我們分享reader.Value – clamchoda

回答

4

使用JArrayJObject對象,而不是像這樣:

var json = System.IO.File.ReadAllText("YourJSONFilePath"); 
var objects = JArray.Parse(json); 

foreach(JObject root in objects) 
{ 
    foreach(KeyValuePair<String, JToken> tag in root) 
    { 
     var tagName = tag.Key; 
     Console.WriteLine("Value: {0}", "This is the value <Tags>: " + tagName); 
    } 
} 
0

看一看閱讀器的性能,因爲它是閱讀的字符串。特別是在TokenType和Value屬性。如果你真的需要順序閱讀,那就是要走的路。取決於正在讀取的節點,TokenType將依次爲StartObject,PropertyName,String等。基本上每次你看到一個PropertyName時,下一個將是屬性值。

請注意,你可能會更好使用其他技術,但這一切都取決於。

2

給出一個JToken token

if (token.Type == JTokenType.Object) 
{ 
    foreach (var pair in token as JObject) 
    { 
     string name = pair.Key; 
     JToken child = pair.Value; 
     //do something with the JSON properties 
    } 
} 
else if (token.Type == JTokenType.Array) 
{ 
    foreach (var child in token.Children()) 
    { 
     //do something with the JSON array items 
    } 
} 
else 
{ 
    //do something with a JSON value 
}