2009-11-08 1 views
24

현재 코드의 구조는 XmlDocument을 사용하여 Xml 데이터를로드 한 다음 SelectNodes을 사용하여 반복되는 항목의 목록을 반복합니다.XML의 XPath, SelectNodes, SelectSingleNode에 해당하는 JSON.NET은 무엇입니까?

각 요소에 대해 XmlNode.SelectSingleNode을 사용하여 필드 요소를 선택합니다.

이제 JSON.NET을 사용하여 JSON으로 전달 된 문서에서 동일한 결과를 얻고 싶습니다. 대답은 JSON.net이 아닌 C# integrable 일 수 있습니다.

답변

34

Json.NET에는 SelectToken이 있습니다. 그것은 문자열 식을 통해 JSON을 얻기 위해 DataBinder.Eval 유사한 구문을 사용합니다

JObject o = JObject.Parse("{'People':[{'Name':'Jeff'},{'Name':'Joe'}]}"); 

// get name token of first person and convert to a string 
string name = (string)o.SelectToken("People[0].Name"); 

또는 여러 값을 선택하고 싶다면 :

JObject o = JObject.Parse("{'People':[{'Name':'Jeff','Roles':['Manager', 'Admin']}]}"); 

// get role array token of first person and convert to a list of strings 
IList<string> names = (string)o.SelectToken("People[0].Roles").Select(t => (string)t).ToList(); 

문서 : 응답에 대한 Querying JSON with SelectToken

+0

니스! 대소 문자를 구별하지 않는 방법으로이 작업을 수행 할 수 있습니까? 'JToken.GetValue ("something", StringComparison.OrdinalIgnoreCase)와 마찬가지로'? –

1

JSON을 매핑 할 수있는 객체 계층 구조가 있습니까? 객체 트리를 만들거나 (예 : JSON을 비 직렬화) LINQ의 Where, SelectMany 등을 사용할 수 있습니다.

+0

감사합니다 마크. 특히, twitter.com/status/mentions.json 피드를 사용하는 임. 내가 사용하고있는 필드를 (빌드 타임에) 알지 못하고 각각의 "상태"를 HTML 렌더링에 전달하고 SelectSingleNode의 Json 버전으로 필드를 가져올 수있게하려고합니다. LINQ 예제가 도움이 될 것입니다. –

+0

아 맞습니다. 그것이 임의의 문자열을 사용하는 것을 허용하지 않습니다. 시나리오마다 코딩이 필요합니다. –