আমার কাঁচা স্ট্রিং আছে আমি কেবল যাচাই করতে চাই যে স্ট্রিংটি বৈধ JSON কিনা। আমি JSON.NET ব্যবহার করছি।
আমার কাঁচা স্ট্রিং আছে আমি কেবল যাচাই করতে চাই যে স্ট্রিংটি বৈধ JSON কিনা। আমি JSON.NET ব্যবহার করছি।
উত্তর:
কোডের মাধ্যমে:
আপনার সেরা বাজি হ'ল পার্স ব্যবহার করা try-catchএবং ব্যর্থ হওয়ার ক্ষেত্রে ব্যতিক্রম ধরা। (আমি কোনও TryParseপদ্ধতি সম্পর্কে অবগত নই ) ।
(JSON.Net ব্যবহার করে)
সহজ উপায় হবে Parseব্যবহার করে STRING JToken.Parse, এবং যদি স্ট্রিং দিয়ে শুরু হয় এছাড়াও চেক করতে {বা [সঙ্গে প্রান্ত }বা ]যথাক্রমে (এই থেকে ইনস্টল জোড়া উত্তর ) :
private static bool IsValidJson(string strInput)
{
if (string.IsNullOrWhiteSpace(stringValue)) { return false;}
strInput = strInput.Trim();
if ((strInput.StartsWith("{") && strInput.EndsWith("}")) || //For object
(strInput.StartsWith("[") && strInput.EndsWith("]"))) //For array
{
try
{
var obj = JToken.Parse(strInput);
return true;
}
catch (JsonReaderException jex)
{
//Exception in parsing json
Console.WriteLine(jex.Message);
return false;
}
catch (Exception ex) //some other exception
{
Console.WriteLine(ex.ToString());
return false;
}
}
else
{
return false;
}
}
জন্য পরীক্ষা যোগ করার কারণ {বা [ইত্যাদি যে ওপর ভিত্তি করে JToken.Parseযেমন মান বিশ্লেষণ করবে "1234"বা "'a string'"একটি বৈধ টোকেন হিসাবে। অন্য বিকল্পটি উভয় JObject.Parseএবং JArray.Parseপার্সিংয়ে ব্যবহার করা এবং তাদের মধ্যে কেউ সফল হয় কিনা তা দেখতে পারা যায় তবে আমি বিশ্বাস করি যে এটি পরীক্ষা করা আরও সহজ {}এবং []সহজ হওয়া উচিত। ( এটি নির্দেশ করার জন্য @ রিনো ডেভেলকে ধন্যবাদ )
JSON.Net ছাড়া
আপনি নেট নেট ফ্রেমওয়ার্ক 4.5 সিস্টেম.জসন নেমস্পেস ব্যবহার করতে পারেন:
string jsonString = "someString";
try
{
var tmpObj = JsonValue.Parse(jsonString);
}
catch (FormatException fex)
{
//Invalid json format
Console.WriteLine(fex);
}
catch (Exception ex) //some other exception
{
Console.WriteLine(ex.ToString());
}
(তবে, আপনাকে System.Jsonকমান্ডটি ব্যবহার করে নুগেট প্যাকেজ ম্যানেজারের মাধ্যমে ইনস্টল করতে হবে : PM> Install-Package System.Json -Version 4.0.20126.16343প্যাকেজ ম্যানেজার কনসোলে) ( এখান থেকে নেওয়া )
নন-কোড উপায়:
সাধারণত, যখন একটি ছোট জসন স্ট্রিং থাকে এবং আপনি জসন স্ট্রিংয়ে কোনও ভুল সন্ধান করার চেষ্টা করছেন, তখন আমি ব্যক্তিগতভাবে অন-লাইন সরঞ্জামগুলি ব্যবহার করতে পছন্দ করি । আমি সাধারণত যা করি তা হ'ল:
JToken.Parse("1234")! প্রথমে চেক করার জন্য ভাল ধারণা হতে পারে, যদি স্ট্রিংটি শুরু হয় [বা দিয়ে {। আর একটি বিকল্প ব্যবহার JObject.Parse()এবং JArray.Parse()।
JToken.Parse("{a:1}")নেই না যদিও এই অবৈধ JSON হয় ব্যতিক্রম নিক্ষেপ - aউদ্ধৃত করা উচিত ( stackoverflow.com/q/949449/3116322 )
JContainer.Parse(str)স্ট্রিংটি বৈধ জাসন কিনা তা পরীক্ষা করার জন্য পদ্ধতিটি ব্যবহার করুন । যদি এটি ব্যতিক্রম ছুঁড়ে ফেলে তবে এটি কোনও বৈধ জাসন নয়।
JObject.Parse- স্ট্রিংটি বৈধ জেসন বস্তু
JArray.Parseকিনা তা পরীক্ষা করতে ব্যবহার করা যেতে পারে - স্ট্রিংটি বৈধ জেসন অ্যারে কিনা
JContainer.Parseতা পরীক্ষা করতে ব্যবহার করা যেতে পারে - জসন বস্তু এবং অ্যারে উভয়ই পরীক্ষা করতে ব্যবহার করা যেতে পারে
JContainer.Parse("1234");।
হাবিবের উত্তরের ভিত্তিতে আপনি একটি এক্সটেনশন পদ্ধতি লিখতে পারেন:
public static bool ValidateJSON(this string s)
{
try
{
JToken.Parse(s);
return true;
}
catch (JsonReaderException ex)
{
Trace.WriteLine(ex);
return false;
}
}
যা এর পরে ব্যবহার করা যেতে পারে:
if(stringObject.ValidateJSON())
{
// Valid JSON!
}
JToken.Parse(s);trueএমনকি ফিরে আসেJToken.Parse(123);
trueএই JSON{A:{"B": 1}}
কেবলমাত্র @ হাবিবের উত্তরে কিছু যুক্ত করতে, আপনি জেএসওএন কোনও বৈধ প্রকারের কিনা তাও পরীক্ষা করতে পারেন:
public static bool IsValidJson<T>(this string strInput)
{
strInput = strInput.Trim();
if ((strInput.StartsWith("{") && strInput.EndsWith("}")) || //For object
(strInput.StartsWith("[") && strInput.EndsWith("]"))) //For array
{
try
{
var obj = JsonConvert.DeserializeObject<T>(strInput);
return true;
}
catch // not valid
{
return false;
}
}
else
{
return false;
}
}
আমি দেখতে পেয়েছি যে জটোকেন। পার্স ভুলভাবে অবৈধ জেএসওনকে পার্স করে যেমন নীচের বিষয়গুলি:
{
"Id" : ,
"Status" : 2
}
জেএসএন স্ট্রিংটি http://jsonlint.com/ এ আটকান - এটি অবৈধ।
সুতরাং আমি ব্যবহার:
public static bool IsValidJson(this string input)
{
input = input.Trim();
if ((input.StartsWith("{") && input.EndsWith("}")) || //For object
(input.StartsWith("[") && input.EndsWith("]"))) //For array
{
try
{
//parse the input into a JObject
var jObject = JObject.Parse(input);
foreach(var jo in jObject)
{
string name = jo.Key;
JToken value = jo.Value;
//if the element has a missing value, it will be Undefined - this is invalid
if (value.Type == JTokenType.Undefined)
{
return false;
}
}
}
catch (JsonReaderException jex)
{
//Exception in parsing json
Console.WriteLine(jex.Message);
return false;
}
catch (Exception ex) //some other exception
{
Console.WriteLine(ex.ToString());
return false;
}
}
else
{
return false;
}
return true;
}
{ name : "l am invalid JSON" }
J বিকল্প বিকল্প JSON.Net ব্যবহার করছে না ⚠️
নেট কোর /। নেট 5 এর জন্য ( এই লেখার পূর্বরূপ হিসাবে ) কেউ System.Text.Jsonনেমস্পেস এবং পার্স ব্যবহার করেও ব্যবহার করতে পারেন JsonDocument। উদাহরণস্বরূপ নামস্থান ক্রিয়াকলাপগুলির উপর ভিত্তি করে একটি এক্সটেনশন পদ্ধতি:
public static bool IsJsonValid(this string txt)
{
try { return JsonDocument.Parse(txt) != null; } catch {}
return false;
}
টম বিচের উত্তর সম্পর্কে; পরিবর্তে আমি নিম্নলিখিতটি নিয়ে এসেছি:
public bool ValidateJSON(string s)
{
try
{
JToken.Parse(s);
return true;
}
catch (JsonReaderException ex)
{
Trace.WriteLine(ex);
return false;
}
}
নিম্নলিখিত ব্যবহারের সাথে:
if (ValidateJSON(strMsg))
{
var newGroup = DeserializeGroup(strMsg);
}
string, তবে এই উত্তরটি আসলে একটি হওয়া উচিত) এখানে না বা খ) "আমি টম বিচের উত্তরটি ব্যবহার করেছি " না বলে বলুন এটি this, অর্থাৎ এটি কোনও এক্সটেনশান সদস্য না করেই) - এই উত্তর এবং রেফারেন্স করা উভয়েরই একই ব্রেভুইটি এবং দুর্বলতা রয়েছে। আপনার যদি এই বিষয়টি করা আবশ্যক তবে কেবলমাত্র অন্য উত্তরে একটি মন্তব্য দিন।
JToken.Typeএকটি সফল পার্স করার পরে উপলব্ধ। এটি উপরের উত্তরের কিছু উপস্থাপক দূর করতে এবং ফলাফলের সূক্ষ্ম নিয়ন্ত্রণের জন্য অন্তর্দৃষ্টি সরবরাহ করতে ব্যবহার করা যেতে পারে। সম্পূর্ণ অবৈধ ইনপুট (যেমন, "{----}".IsValidJson();এখনও একটি ব্যতিক্রম ছুঁড়ে ফেলবে)।
public static bool IsValidJson(this string src)
{
try
{
var asToken = JToken.Parse(src);
return asToken.Type == JTokenType.Object || asToken.Type == JTokenType.Array;
}
catch (Exception) // Typically a JsonReaderException exception if you want to specify.
{
return false;
}
}
Json.Net রেফারেন্স এর জন্য JToken.Type: https://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_Linq_JTokenType.htm
হাবিবের উত্তরের উপর ভিত্তি করে এখানে একটি ট্রাইপারস এক্সটেনশন পদ্ধতি রয়েছে:
public static bool TryParse(this string strInput, out JToken output)
{
if (String.IsNullOrWhiteSpace(strInput))
{
output = null;
return false;
}
strInput = strInput.Trim();
if ((strInput.StartsWith("{") && strInput.EndsWith("}")) || //For object
(strInput.StartsWith("[") && strInput.EndsWith("]"))) //For array
{
try
{
output = JToken.Parse(strInput);
return true;
}
catch (JsonReaderException jex)
{
//Exception in parsing json
//optional: LogError(jex);
output = null;
return false;
}
catch (Exception ex) //some other exception
{
//optional: LogError(ex);
output = null;
return false;
}
}
else
{
output = null;
return false;
}
}
ব্যবহার:
JToken jToken;
if (strJson.TryParse(out jToken))
{
// work with jToken
}
else
{
// not valid json
}
আমি এটি ব্যবহার করছি:
internal static bool IsValidJson(string data)
{
data = data.Trim();
try
{
if (data.StartsWith("{") && data.EndsWith("}"))
{
JToken.Parse(data);
}
else if (data.StartsWith("[") && data.EndsWith("]"))
{
JArray.Parse(data);
}
else
{
return false;
}
return true;
}
catch
{
return false;
}
}