json.net কী পদ্ধতি আছে?


140

যদি আমার প্রতিক্রিয়াটির কী "ত্রুটি" থাকে তবে আমার ত্রুটিটি প্রক্রিয়া করতে হবে এবং সতর্কতা বাক্সটি দেখানো দরকার।

Json.net এ কি "হাসকি" পদ্ধতি বিদ্যমান আছে? ভালো লেগেছে:

var x= JObject.Parse(string_my);
if(x.HasKey["error_msg"])
    MessageBox.Show("Error!")

1
আমার উত্তর এখানে দেখুন
বেন

আমি এখানে একই ধরণের সমস্যার সাথে একটি প্রশ্নের জবাব দিয়েছি: stackoverflow.com/a/47204235/1037314
বেন

1
এই প্রশ্নের দুটি রূপ আছে: একটি বৈকল্পিক হ'ল যেখানে জেএসওন অভিধান ফ্ল্যাট (কোনও শিশু নেই) এবং অন্যটি, যেখানে বাচ্চাদের শ্রেণিবিন্যাসের মূল অংশটি। এটি লেখার সময়, এনএস.জেসনের এখনও কোনও সুবিধা পদ্ধতি নেই যা কোনও কীটির পরীক্ষার জন্য সহজ অ্যাক্সেস দেয়।
ljgww

উত্তর:


240

শুধু ব্যবহার x["error_msg"]। সম্পত্তি উপস্থিত না থাকলে, এটি ফিরে আসে null


37
সম্পত্তির মূল্য যদি হয় null?
Andreas Furster

67
@AndreasFurster তারপর এটি একটি ফিরে আসবে JValueযার Valueহয় nullশুধু নয়, null
সোভিক

1
সম্পত্তিটি যদি হতে পারে তবে আপনি JSON অবজেক্টে সম্পত্তিটি সংজ্ঞায়িত হয়েছে কিনা তা যাচাই nullকরতে ব্যবহার x["error_msg"] is Objectকরতে পারেন
স্টোনিটো

2
@ user3199329 এটি লেখার জন্য কেবল একটি বিভ্রান্তিমূলক উপায় x["error_msg"] != null, সুতরাং না এটি পরীক্ষা করে না যে সম্পত্তিটি বিদ্যমান এবং এর মান রয়েছে null
এসভিক

9
@ WilliamT.Mallard ইন সি # 6, আপনি যে প্রক্রিয়া সহজ করতে নাল-শর্তাধীন সূচক অপারেটর ব্যবহার করে: myJObject["level1property"]?["level2property"]
সুইভ

98

JObjectপ্রয়োগ IDictionary<string, JToken>, যাতে আপনি ব্যবহার করতে পারেন:

IDictionary<string, JToken> dictionary = x;
if (dictionary.ContainsKey("error_msg"))

... বা আপনি ব্যবহার করতে পারেন TryGetValue। এটি সুস্পষ্ট ইন্টারফেস বাস্তবায়ন ব্যবহার করে উভয় পদ্ধতি প্রয়োগ করে, তাই আপনি প্রথমে IDictionary<string, JToken>যদিও রূপান্তর না করে সেগুলি ব্যবহার করতে পারবেন না ।


আমি পাতলা এটি ধীরে ধীরে স্বীকৃত উত্তর হবে তবে ধন্যবাদ।
সেভেনডয়েস

2
@ উইভেনডেস, এখানে কি গতি আপনার পক্ষে গুরুত্বপূর্ণ বা কেবল মাইক্রোপটিমাইজিং (এবং এটি অনুমানের উপর ভিত্তি করে) রয়েছে? আপনি যা বেশি পঠনযোগ্য তা আপনার ব্যবহার করা উচিত।
সোভিক ২

আমার ডাব্লুপি 7 ফোনের 1GHz প্রসেসরের গতি দুর্দান্ত নয় এবং আমার গতির যত্ন নেওয়া দরকার।
সেভেনডিজ

1
@ উইভেনডেস: কেন এটি গৃহীত উত্তরের চেয়ে ধীর (বা দ্রুত) হবে?
জন স্কিটে

24
@ উইসভেদয়ে: না, এটি অভিধান তৈরি করে না । JObject ইতিমধ্যে প্রয়োগ IDictionary<string, JToken> । এটি কেবল একটি রেফারেন্স অ্যাসাইনমেন্ট। এবং না, গৃহীত উত্তর কীটি কোনও অ্যারেতে রয়েছে কিনা তা পরীক্ষা করছে না ... এটি এখনও একটি সাধারণ সূচক ব্যবহার করছে। শুধু কারণ এটি দেখায় অ্যারের access, ইত্যাদি মানে এই নয় এটা হল অ্যারে অ্যাক্সেস। (অ্যারে অ্যাক্সেস প্রথম স্থানে স্ট্রিংয়ের মাধ্যমে হতে পারে না))
জন স্কিটে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.