Qual é o equivalente JSON.NET de de XML XPath, SelectNodes, SelectSingleNode?
Pergunta
Actualmente, a estrutura das minhas usa código XmlDocument
aos dados de carga XML e SelectNodes
para percorrer uma lista de repetir itens.
Para cada elemento, estou usando XmlNode.SelectSingleNode
para escolher os elementos de campo.
Agora eu quero usar JSON.NET para alcançar os mesmos resultados com documentos entregues a mim como JSON. A resposta pode ser algo diferente do JSON.net, desde que de C # integrável.
Solução
Json.NET tem SelectToken. Ele usa uma sintaxe semelhante à DataBinder.Eval para obter JSON via uma expressão de cadeia:
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");
Ou se você quiser selecionar vários 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();
Documentação: Consultando JSON com SelectToken
Outras dicas
Você tem uma hierarquia de objeto que você pode mapear o JSON? Você poderia criar uma árvore de objetos (ou seja deserialize o JSON), e usar Where
, SelectMany
do LINQ, etc.