2017-05-02 14 views
0

JObject를 파싱 할 때 도움이 필요합니다.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 개체의 모든 요소를 ​​찾아 및 해당 "계산"값을 저장하는 것입니다 : 다음 JSON은 C#에서 코드 줄의 결과입니다. null을 반환하는이 코드 줄을 사용하여 그 중 하나를 찾으려고했습니다.

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

내 생각 엔 "generic_Click.facebook"의 점은 경로가 아닌 찾을 수있는 이름으로이 고려 SelectToken의 원인이되는 것입니다.

누구든지 나를 도와 줄 수 있습니까? "generic_Click"으로 시작하는이 json 객체의 모든 요소에 대해 "개수"를 반환하는 방법을 찾으려고합니다.

감사

답변

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"]); 
} 

하고 그들을 통해 루프가 요소를 얻을 수 있습니다.

이 정보가 도움이되기를 바랍니다.