2009-11-08 8 views
24

वर्तमान में, मेरे कोड की संरचना X12 डेटा लोड करने के लिए XmlDocument का उपयोग करती है और फिर SelectNodes दोहराने वाली वस्तुओं की सूची के माध्यम से पुनरावृत्त करने के लिए उपयोग करती है।XML के XPath, SelectNodes, SelectSingleNode के JSON.NET समकक्ष क्या है?

प्रत्येक तत्व के लिए, मैं फ़ील्ड तत्वों को चुनने के लिए XmlNode.SelectSingleNode का उपयोग कर रहा हूं।

अब मैं जेएसओएन के रूप में मुझे दिए गए दस्तावेजों के साथ एक ही परिणाम प्राप्त करने के लिए JSON.NET का उपयोग करना चाहता हूं। उत्तर JSON.net के अलावा कुछ और हो सकता है, जब तक यह सी # अभिन्न अंग है।

उत्तर

34

Json.NET SelectToken है इस्तेमाल कर सकते हैं। यह एक वाक्य रचना DataBinder.Eval के लिए इसी तरह का उपयोग करता है एक स्ट्रिंग अभिव्यक्ति के माध्यम से प्राप्त करने के लिए JSON:

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 की तरह ("कुछ", स्ट्रिंग कॉम्परिसन। ऑर्डिनल इग्नोरकेस) '? –

1

क्या आपके पास ऑब्जेक्ट पदानुक्रम है कि आप JSON को मानचित्र बना सकते हैं? आप एक वस्तु पेड़ (अर्थात deserialize JSON) बनाते हैं, और LINQ के Where, SelectMany, आदि

+0

प्रतिक्रिया के लिए धन्यवाद मार्क। विशेष रूप से, मैं twitter.com/status/mentions.json फ़ीड का उपयोग कर रहा हूँ। मैं प्रत्येक "स्थिति" को एचटीएमएल रेंडर को बिना (बिना बिल्डटाइम) के पास भेजना चाहता हूं, जो फ़ील्ड इसका उपयोग कर रहा है और इसे SelectSingleNode के जेसन संस्करण के साथ फ़ील्ड खींचने की अनुमति देता है। एक LINQ उदाहरण बहुत मदद करेगा :) –

+0

आह, ठीक है। यह आपको एक मनमानी स्ट्रिंग का उपयोग करने की अनुमति नहीं देगा, अगर आपका यही मतलब है। इसे प्रति परिदृश्य कोडिंग की आवश्यकता होगी। –

संबंधित मुद्दे