javascript - شرح - string to json java




بأمان تحويل سلسلة JSON إلى كائن (14)

أسهل طريقة باستخدام طريقة parse() :

var response = '{"result":true,"count":1}';
var JsonObject= JSON.parse(response);

يمكنك الحصول على قيم عناصر Json ، على سبيل المثال:

var myResponseResult = JsonObject.result;
var myResponseCount = JsonObject.count;

باستخدام jQuery كما هو موضح في documentation :

JSON.parse(jsonString);

بالنظر إلى سلسلة من بيانات JSON ، كيف يمكنك تحويل هذه السلسلة بأمان إلى كائن جافا سكريبت؟

من الواضح أنه يمكنك القيام بذلك بطريقة غير آمنة مع شيء مثل ...

var obj = eval("(" + json + ')');

... لكن هذا يتركنا عرضة لسلسلة json التي تحتوي على رمز آخر ، والذي يبدو خطيرًا جدًا أن ننتهي ببساطة.


إذا كنت تريد استخدام هذه الطريقة بهذه الطريقة ، فمعنى ذلك أن كائن البيانات هو الذي تريده: Data = '{result: true، count: 1}'

try {
  eval('var obj=' + Data);
  console.log(obj.count);
}
catch(e) {
  console.log(e.message);
}

هذه الطريقة تساعد حقا في Nodejs إذا كنت تعمل مع برمجة المنفذ التسلسلي


استخدم رمز بسيط ممثلة في الارتباط التالي على MSDN .

var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';
var contact = JSON.parse(jsontext);

والعكس

var str = JSON.stringify(arr);

السؤال الأقدم ، أعرف ، لا أحد يلاحظ هذا الحل باستخدام new Function() ، وهي وظيفة مجهولة تعيد البيانات.

فقط مثال على ذلك:

 var oData = 'test1:"This is my object",test2:"This is my object"';

 if( typeof oData !== 'object' )
  try {
   oData = (new Function('return {'+oData+'};'))();
  }
  catch(e) { oData=false; }

 if( typeof oData !== 'object' )
  { alert( 'Error in code' ); }
 else {
        alert( oData.test1 );
        alert( oData.test2 );
      }

هذا هو أكثر أمنا قليلا لأنه ينفذ داخل وظيفة ولا يتم تجميعها في التعليمات البرمجية الخاصة بك مباشرة. لذلك إذا كان هناك إعلان دالة داخله ، فلن يكون مرتبطًا بكائن الإطار الافتراضي.

يمكنني استخدام هذا لإعداد "تكوين" إعدادات تكوين عناصر DOM (على سبيل المثال سمة البيانات) بسيطة وسريعة.


تعديل: هذه الإجابة قديمة وأصبحت إجابة جوناثان أعلاه JSON.parse(jsonString) ) الآن هي أفضل إجابة.

يحتوي JSON.org على موزعي JSON للعديد من اللغات بما في ذلك 4 لغات مختلفة JSON.org سكريبت. أعتقد أن معظم الناس قد json2.js في تنفيذ json2.js .


تم إيقاف طريقة jQuery الآن. استخدم هذه الطريقة بدلاً من ذلك:

let jsonObject = JSON.parse(jsonString);

الإجابة الأصلية باستخدام وظيفة jQuery التي تم إيقافها :

إذا كنت تستخدم jQuery ، فاستخدم فقط:

jQuery.parseJSON( jsonString );

إنه بالضبط ما تبحث عنه (راجع documentation jQuery).


لست متأكدًا من طرق أخرى للقيام بذلك ، ولكن إليك كيفية القيام بذلك في Prototype (برنامج تعليمي JSON) .

new Ajax.Request('/some_url', {
  method:'get',
  requestHeaders: {Accept: 'application/json'},
  onSuccess: function(transport){
    var json = transport.responseText.evalJSON(true);
  }
});

استدعاء evalJSON () بصحيح كالعجوبة تعقيم السلسلة الواردة.


لقد استخدمت بنجاح json_sans_eval لفترة من الوقت الآن. وفقا لمؤلفها ، فإنه أكثر أمانا من json2.js.


للمتعة فقط ، إليك طريقة استخدام الوظيفة:

 jsonObject = (new Function('return ' + jsonFormatData))()

يبدو أن هذه هي القضية:

يتم استلام مدخلات عبر webbox ، أو ajax ، وستكون دائمًا في تنسيق String - ولكنك تحتاج إلى معرفة ما إذا كانت JSON.parsable. Touble هو أنه إذا كنت تقوم بتشغيله دائمًا من خلال JSON.parse ، فإن البرنامج قد يستمر 'بنجاح' ولكنك ستستمر في رؤية خطأ تم إلقائه في وحدة التحكم باستخدام "خطأ: رمز غير متوقع" x "".

var data;

try {
  data = JSON.parse(jqxhr.responseText);
} catch (_error) {}

data || (data = {
  message: 'Server error, please retry'
});

يعمل تحويل الكائن إلى JSON ، ومن ثم تحليله ، بالنسبة لي ، مثل:

JSON.parse(JSON.stringify(object))

يمكنك أيضا استخدام وظيفة reviver لتصفية.

var data = JSON.parse(jsonString, function reviver(key, value) {
   //your code here to filter
});

لمزيد من المعلومات ، اقرأ JSON.parse(jsonString)


موثقة رسميا :

يوزع الأسلوب JSON.parse() سلسلة JSON ، مما يؤدي إلى إنشاء قيمة جافا سكريبت أو كائن موصوف بواسطة السلسلة. يمكن reviver وظيفة reviver اختيارية لتنفيذ تحويل على الكائن الناتج قبل أن يتم إرجاعها.

بناء الجملة

JSON.parse(text[, reviver])

المعلمات

نص

السلسلة المراد تحليلها كـ JSON. راجع كائن JSON للحصول على وصف لبناء جملة JSON.

reviver (اختياري)

إذا كانت إحدى الوظائف ، فهذا يشرح كيف يتم تحويل القيمة التي يتم إنتاجها في الأصل عن طريق التحليل ، قبل إعادتها.

قيمة الإرجاع

الكائن المناظر لنص JSON المحدد.

استثناءات

يلقي استثناء SyntaxError إذا كانت سلسلة تحليل غير صالحة JSON.


$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback
});

يتم تمرير معاودة الاتصال إلى البيانات التي تم إرجاعها ، والتي ستكون كائن جافا سكريبت أو مصفوفة كما هو محدد بواسطة بنية JSON ويتم تحليلها باستخدام طريقة $.parseJSON() .







json