2009-11-08 16 views
24

Actualmente, la estructura de mi código usa XmlDocument para cargar datos Xml y luego SelectNodes para iterar a través de una lista de elementos que se repiten.¿Cuál es el equivalente JSON.NET de XML's XPath, SelectNodes, SelectSingleNode?

Para cada elemento, estoy usando XmlNode.SelectSingleNode para seleccionar los elementos del campo.

Ahora quiero usar JSON.NET para lograr los mismos resultados con los documentos entregados como JSON. La respuesta puede ser algo más que JSON.net, siempre que sea C# integrable.

Respuesta

34

Json.NET tiene SelectToken. Se utiliza una sintaxis similar a DataBinder.Eval para obtener JSON a través de una expresión de cadena:

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

O si desea seleccionar varios valores:

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(); 

Documentación: Querying JSON with SelectToken

+0

¡Agradable! ¿Hay alguna manera de hacer esto de una manera que no distinga entre mayúsculas y minúsculas? Como 'JToken.GetValue (" something ", StringComparison.OrdinalIgnoreCase)'? –

1

¿Tiene una jerarquía de objetos que puede asignar el JSON? Se puede crear un árbol de objetos (es decir deserializar el JSON), y el uso de LINQ de Where, SelectMany, etc.

+0

Gracias por la respuesta Bagazo. Específicamente, estoy usando el feed de twitter.com/status/mentions.json. Quiero pasar cada "estado" a un Render HTML sin saber (en tiempo de construcción) qué campos está usando y permitirle extraer campos con la versión Json de SelectSingleNode. Un ejemplo de LINQ ayudaría mucho :) –

+0

Ah, a la derecha. No le permitiría usar una cadena arbitraria, si eso es lo que quiere decir. Necesitaría codificación por escenario. –

Cuestiones relacionadas