2017-05-02 16 views
0

JObjectの解析にはいくつかの助けが必要です。次のJSONは、C#でのコード行の結果である:SelectTokensを使用したJSONのクエリーc#

var o = JObject.Parse(data); 

o {{ 
    "firstdata": { 
    "count": 17, 
    "firstOccurrence": 1493663381786, 
    "lastOccurrence": 1493681141398 
    }, 
    "views": { 
    "count": 17, 
    "firstOccurrence": 1493663381787, 
    "lastOccurrence": 1493681141398 
    }, 
    "session": { 
    "count": 57, 
    "firstOccurrence": 1493663381787, 
    "lastOccurrence": 1493681159212 
    }, 
    "test": { 
    "count": 17, 
    "firstOccurrence": 1493663381788, 
    "lastOccurrence": 1493681141399 
    }, 
    "browser": { 
    "count": 17, 
    "firstOccurrence": 1493663381788, 
    "lastOccurrence": 1493681141399 
    }, 
    "click": { 
    "count": 18, 
    "firstOccurrence": 1493663381805, 
    "lastOccurrence": 1493681141410 
    }, 
    "click.Default": { 
    "count": 18, 
    "firstOccurrence": 1493663381805, 
    "lastOccurrence": 1493681141410 
    }, 
    "click.6": { 
    "count": 18, 
    "firstOccurrence": 1493663381805, 
    "lastOccurrence": 1493681141410 
    }, 
    "generic_Click.mail": { 
    "count": 4, 
    "firstOccurrence": 1493663488302, 
    "lastOccurrence": 1493675499011 
    }, 
    "generic_Click.calander": { 
    "count": 3, 
    "firstOccurrence": 1493663649203, 
    "lastOccurrence": 1493675501110 
    }, 
    "generic_Click.tweet": { 
    "count": 2, 
    "firstOccurrence": 1493663657444, 
    "lastOccurrence": 1493675577793 
    }, 
    "generic_Click.facebook": { 
    "count": 3, 
    "firstOccurrence": 1493663840925, 
    "lastOccurrence": 1493677734366 
    } 
}} 

私は必要なもの「generic_click」で始まり、それに対応する「カウント」の値を格納し、このJSONオブジェクト内のすべての要素を探すことです。私はnullを返すこのコード行を使ってそれらの1つを探しました。

var test = o.SelectToken("generic_Click.facebook"); 

私の推測では、「generic_Click.facebook」のドットはパスではなく、探すための名前としてこれを考慮SelectTokenを引き起こしているということです。

誰でも助けてくれますか? "generic_Click"で始まるこのjsonオブジェクトのすべての要素の "count"を返す方法を見つけることを試みています。

どうもありがとう

答えて

0

あなたは辞書に項目名とカウントを収集するためにLINQクエリを使用することができます。

Dictionary<string, int> dict = JObject.Parse(data).Properties() 
    .Where(p => p.Name.StartsWith("generic_Click")) 
    .ToDictionary(p => p.Name, p => (int)p.Value["count"]); 

foreach (var kvp in dict) 
{ 
    Console.WriteLine(kvp.Key + ": " + kvp.Value); 
} 

フィドル:https://dotnetfiddle.net/9Oq4J4

+0

が、これは完全に働いた、そんなにブライアンをありがとう:)。それを感謝します – AlreadyLost

+0

私は助けることができてうれしいです。 –

1

だけ含まれている多くの要素を選択する

o.SelectToken("generic_Click.facebook") 

から

o["generic_Click.facebook"] 

にあなたの選択プロセスを切り替えるキーで期間を持つ単一要素パスを選択するにはあなたのキーワードgeneric_Clickあなたは次のようにlinqを使用することができます

var o = JObject.Parse(data); 

var genericClick = o.AsJEnumerable().Where(x=>x.Path.Contains("generic_Click")); 

、その後、あなたがそのような

foreach (var token in genericClick) 
{ 
    Console.Write(token.First()["count"]); 
} 

と、それらをループがあなたの要素を取得することができます。

こちらがお役に立てば幸いです。

関連する問題