javascript - convert - serialize php




التسلسل إلى JSON في jQuery (8)

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

أحتاج إلى تسلسل كائن إلى JSON. أنا أستخدم jQuery. هل هناك طريقة "قياسية" للقيام بذلك؟

وضعي المحدد: لدي صفيف محدد كما هو موضح أدناه:

var countries = new Array();
countries[0] = 'ga';
countries[1] = 'cd';
...

وأنا بحاجة لتحويل هذا إلى سلسلة لتمريرها إلى $.ajax() مثل هذا:

$.ajax({
    type: "POST",
    url: "Concessions.aspx/GetConcessions",
    data: "{'countries':['ga','cd']}",
...

أفضل طريقة هي تضمين polyfill لكائن JSON-js .

ولكن إذا كنت تصر على إنشاء طريقة لتسلسل كائن إلى تدوين JSON ( قيم صالحة لـ JSON ) داخل مساحة الاسم jQuery ، فيمكنك القيام بشيء كالتالي:

التنفيذ

// This is a reference to JSON.stringify and provides a polyfill for old browsers.
// stringify serializes an object, array or primitive value and return it as JSON.
jQuery.stringify = (function ($) {
  var _PRIMITIVE, _OPEN, _CLOSE;
  if (window.JSON && typeof JSON.stringify === "function")
    return JSON.stringify;

  _PRIMITIVE = /string|number|boolean|null/;

  _OPEN = {
    object: "{",
    array: "["
  };

  _CLOSE = {
    object: "}",
    array: "]"
  };

  //actions to execute in each iteration
  function action(key, value) {
    var type = $.type(value),
      prop = "";

    //key is not an array index
    if (typeof key !== "number") {
      prop = '"' + key + '":';
    }
    if (type === "string") {
      prop += '"' + value + '"';
    } else if (_PRIMITIVE.test(type)) {
      prop += value;
    } else if (type === "array" || type === "object") {
      prop += toJson(value, type);
    } else return;
    this.push(prop);
  }

  //iterates over an object or array
  function each(obj, callback, thisArg) {
    for (var key in obj) {
      if (obj instanceof Array) key = +key;
      callback.call(thisArg, key, obj[key]);
    }
  }

  //generates the json
  function toJson(obj, type) {
    var items = [];
    each(obj, action, items);
    return _OPEN[type] + items.join(",") + _CLOSE[type];
  }

  //exported function that generates the json
  return function stringify(obj) {
    if (!arguments.length) return "";
    var type = $.type(obj);
    if (_PRIMITIVE.test(type))
      return (obj === null ? type : obj.toString());
    //obj is array or object
    return toJson(obj, type);
  }
}(jQuery));

استعمال

var myObject = {
    "0": null,
    "total-items": 10,
    "undefined-prop": void(0),
    sorted: true,
    images: ["bg-menu.png", "bg-body.jpg", [1, 2]],
    position: { //nested object literal
        "x": 40,
        "y": 300,
        offset: [{ top: 23 }]
    },
    onChange: function() { return !0 },
    pattern: /^bg-.+\.(?:png|jpe?g)$/i
};

var json = jQuery.stringify(myObject);
console.log(json);

إذا كنت لا ترغب في استخدام المكتبات الخارجية ، .toSource() طريقة .toSource() الأصلية لجافا سكريبت ، ولكنها ليست .toSource() .


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

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

تحرير: لن أخرج وأقول أن كتابة أساليب serliazation الخاصة بك سيئة ، ولكن يجب أن تفكر أنه إذا كان من المهم لتطبيقك استخدام JSON جيد التكوين ، فعليك أن تزن النفقات العامة من "واحد أكثر التبعية "ضد احتمال أن طرقك المخصصة قد تواجه يومًا حالة فشل لم تكن تتوقعها. ما إذا كانت هذه المخاطر مقبولة أم لا.


لقد تم استخدام jquery-json لمدة 6 أشهر وهو يعمل بشكل رائع. إنه سهل الاستخدام للغاية:

var myObj = {foo: "bar", "baz": "wockaflockafliz"};
$.toJSON(myObj);

// Result: {"foo":"bar","baz":"wockaflockafliz"}


نعم ، يجب عليك JSON.stringify و JSON.parse "Json_PostData" قبل الاتصال بـ $ .ajax

   $.ajax({
            url:    post_http_site,  
            type: "POST",         
            data:   JSON.parse(JSON.stringify(Json_PostData)),       
            cache: false,
            error: function (xhr, ajaxOptions, thrownError) {
                alert(" write json item, Ajax error! " + xhr.status + " error =" + thrownError + " xhr.responseText = " + xhr.responseText );    
            },
            success: function (data) {
                alert("write json item, Ajax  OK");

            } 
    });


JSON-js - JSON in JavaScript.

لتحويل كائن إلى سلسلة ، استخدم JSON.stringify :

var json_text = JSON.stringify(your_object, null, 2);

لتحويل سلسلة JSON إلى كائن ، استخدم JSON.parse :

var your_object = JSON.parse(json_text);

تم اقتراحه مؤخرًا بواسطة John Resig :

... من فضلك ابدأ في ترحيل تطبيقاتك التي تستخدم JSON إلى json2.js في Crockford. وهو متوافق تمامًا مع مواصفات ECMAScript 5 ويتحلل برشاقة في حالة وجود تطبيق أصلي (أسرع!).

في الواقع ، لقد قمت للتو بتغيير في jQuery بالأمس يستخدم أسلوب JSON.parse إذا كان موجودًا ، الآن بعد أن تم تحديده بالكامل.

أنا أميل إلى الوثوق بما يقوله في مسائل جافا سكريبت :)

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







serialization