javascript - parse - unexpected token o in json at position 1




تحليل JSON في JavaScript؟ (11)

هذا السؤال لديه بالفعل إجابة هنا:

أرغب في تحليل سلسلة JSON في JavaScript. الاستجابة شيء من هذا القبيل

var response = '{"result":true,"count":1}';

كيف يمكنني الحصول على result القيم count من هذا؟


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

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

هذا مثال على كيفية الحصول على القيم:

var myResponseResult = JsonObject.a;
var myResponseCount = JsonObject.b;

إذا تحب

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

يمكنك الوصول إلى عناصر JSON بواسطة JsonObject مع (.) نقطة:

JsonObject.result;
JsonObject.count;

إذا كنت تحصل على هذا من موقع خارجي ، فقد يكون من المفيد استخدام getJSON في jQuery. إذا كانت هناك قائمة ، يمكنك التكرار من خلالها مع $ .each

$.getJSON(url, function (json) {
    alert(json.result);
    $.each(json.list, function (i, fb) {
        alert(fb.result);
    });
});

إذا كنت تريد استخدام JSON 3 للمتصفحات القديمة ، فيمكنك تحميلها بشكل مشروط مع:

<script>
    window.JSON || 
    document.write('<script src="//cdnjs.cloudflare.com/ajax/libs/json3/3.2.4/json3.min.js"><\/scr'+'ipt>');
</script>

أصبح الآن الكائن window.JSON القياسي متاحًا لك بغض النظر عن المتصفح الذي window.JSON العميل.


إذا كنت تستخدم jQuery ، فهي بسيطة:

var response = '{"result":true,"count":1}';
var obj = $.parseJSON(response);
alert(obj.result); //true
alert(obj.count); //1

اعتقدت أن JSON.parse(myObject) سيعمل. ولكن اعتمادًا على المتصفحات ، قد يكون من المفيد استخدام eval('('+myObject+')') . المسألة الوحيدة التي يمكنني التوصية بها للمراقبة هي القائمة متعددة المستويات في JSON.


بادئ ذي بدء ، يجب عليك التأكد من صحة كود JSON.

بعد ذلك ، أوصي باستخدام مكتبة جافا سكريبت مثل jQuery أو Prototype إذا كنت تستطيع ذلك لأن هذه الأشياء يتم التعامل معها بشكل جيد في تلك المكتبات.

من ناحية أخرى ، إذا كنت لا ترغب في استخدام مكتبة ويمكنك ضمان صحة كائن JSON ، فإنني ببساطة أقوم بحفظ السلسلة في وظيفة مجهولة واستخدم الدالة eval.

لا ينصح بهذا إذا كنت تحصل على كائن JSON من مصدر آخر غير موثوق به تمامًا نظرًا لأن وظيفة eval تسمح لكود متمرد إذا شئت.

هنا مثال على استخدام وظيفة eval:

var strJSON = '{"result":true,"count":1}';
var objJSON = eval("(function(){return " + strJSON + ";})()");
alert(objJSON.result);
alert(objJSON.count);

إذا كنت تتحكم في المتصفح الذي تستخدمه أو إذا كنت لا تشعر بالقلق من الأشخاص باستخدام متصفح قديم ، فيمكنك دائمًا استخدام طريقة JSON.parse.

هذا هو حقا الحل الأمثل للمستقبل.


دون استخدام مكتبة يمكنك استخدام eval - الوقت الوحيد الذي يجب عليك استخدامه. من الأسلم استخدام المكتبة على الرغم من ذلك.

على سبيل المثال ...

var response = '{"result":true , "count":1}';

var parsedJSON = eval('('+response+')');

var result=parsedJSON.result;
var count=parsedJSON.count;

alert('result:'+result+' count:'+count);

كما ذكر العديد من المتصفحات الأخرى ، فإن معظم المتصفحات تدعم JSON.stringify و JSON.stringify .

الآن ، أود أيضًا أن أضيف أنه إذا كنت تستخدم AngularJS (التي أوصي بها بشدة) ، فإنه يوفر أيضًا الوظائف التي تحتاجها:

var myJson = '{"result": true, "count": 1}';
var obj = angular.fromJson(myJson);//equivalent to JSON.parse(myJson)
var backToJson = angular.toJson(obj);//equivalent to JSON.stringify(obj)

أردت فقط إضافة الأشياء حول AngularJS لتوفير خيار آخر. لاحظ أن AngularJS لا تدعم بشكل رسمي Internet Explorer 8 (والإصدارات الأقدم ، لهذا الأمر) ، ولكن من خلال التجربة ، يبدو أن معظم الأشياء تعمل بشكل جيد.


معظم المتصفحات تدعم JSON.parse() ، والذي تم تعريفه في ECMA-262 5th Edition (المواصفات التي تعتمد عليها JavaScript). استخدامه بسيط:

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

alert(obj.count);

للمتصفحات التي لا يمكنك تنفيذها باستخدام json2.js .

كما هو مذكور في التعليقات ، إذا كنت تستخدم jQuery بالفعل ، فهناك وظيفة $.parseJSON إذا كانت متاحة أو شكلاً من أشكال eval في المتصفحات القديمة. ومع ذلك ، يقوم هذا بإجراء فحوصات إضافية غير ضرورية يتم إجراؤها أيضًا بواسطة JSON.parse ، لذا للحصول على أفضل أداء مستدير ، أوصي باستخدامه كما يلي:

var json = '{"result":true,"count":1}',
    obj = JSON && JSON.parse(json) || $.parseJSON(json);

سيضمن لك ذلك استخدام JSON.parse الأصلي على الفور ، بدلاً من استخدام jQuery لفحوص سلامة العقل على السلسلة قبل تمريرها إلى دالة التوزيع الأصلية.


يمكنك استخدام وظيفة eval كما في بعض الإجابات الأخرى. (لا تنس الأقواس الإضافية.) ستعرف لماذا عند التعمق أكثر ، أو ببساطة استخدام وظيفة jQuery parseJSON :

var response = '{"result":true , "count":1}'; 
var parsedJSON = $.parseJSON(response);

أو

يمكنك استخدام هذا الرمز أدناه.

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

ويمكنك الوصول إلى الحقول باستخدام jsonObject.result و jsonObject.count .







parsing