JQuery-də JSON serializasiyası

JSON-da bir obyektin serialize edilməsi lazımdır. JQuery istifadə edirəm. Bunu etmək üçün "standart" bir yol varmı?

Mənim xüsusi vəziyyətim: Aşağıda göstərildiyi kimi bir sıra var:

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

və bunu $.ajax() a getmək üçün bir dize çevirmək lazımdır:

 $.ajax({ type: "POST", url: "Concessions.aspx/GetConcessions", data: "{'countries':['ga','cd']}", ... 
1134
10 окт. Herb Caudill tərəfindən təyin olunan 10 oct. 2008-10-10 18:29 '08 at 18:29 2008-10-10 18:29
@ 11 cavab

JSON-js - JSON javascript.

Bir obyekti bir dize çevirmək üçün JSON.stringify istifadə JSON.stringify :

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

JSON düsturunu bir obyektə çevirmək üçün JSON.parse istifadə JSON.parse :

 var your_object = JSON.parse(json_text); 

John Resig tərəfindən son təklif:

... JSON-dan istifadə edərək ərizələrinizi Crockford json2.js saytına köçürməyə başlayın. Tam olaraq ECMAScript 5 xüsusiyyətləri ilə uyğundur və doğma (daha sürətli!) Tətbiqi yerinə yetirildikdə düzgün azaldılır.

Həqiqətən, mən dünən JQuery dəyişikliyinə düşdüm, bu halda JSON.parse metodunu istifadə edir, indi tam olaraq müəyyənləşdirilmişdir.

Mən JavaScript məsələlərində nə demək güvənirəm :)

Yeni brauzerlər dəstək verir

1089
26 мая '09 в 22:22 2009-05-26 22:22 cavab 2605 May 26 '09 saat 10:22 'də verilir. 2009-05-05 22:22

6 ay ərzində jquery-json istifadə edirəm və yaxşı işləyir. Bu çox sadə bir istifadə:

border=0
 var myObj = {foo: "bar", "baz": "wockaflockafliz"}; $.toJSON(myObj); // Result: {"foo":"bar","baz":"wockaflockafliz"} 
181
02 июня '11 в 0:40 2011-06-02 00:40 cavab jay taylor tərəfindən 02 iyun 2011-ci il tarixində 0:40 2011-06-02 00:40 ilə verilir

IE8 + ilə işləyir

Heç bir jQuery lazım deyil, istifadə edin:

 JSON.stringify(countries); 
92
29 авг. Cavab verilir pestatije 29 aug. 2011-08-29 09:57 '11 at 9:57 2011-08-29 09:57

Mən bunu istifadə etmirəm, amma Mark Gibson tərəfindən yazılmış jQuery pluginini sınayabilirsiniz

İki funksiyanı əlavə edir: $.toJSON(value) , $.parseJSON(json_str, [safe]) .

43
10 окт. Tahir Akhtar'a cavab 10 oktyabr 2008-10-10 18:35 '08 at 18:35 2008-10-10 18:35

Xeyr, JSON-də serialize etmək üçün standart yol mövcud JSON serialization kitabxanasını istifadə etməkdir. Bunu etmək istəmirsinizsə, öz serializasiya üsullarını yazmalısınız.

Bunu necə etmək barədə təlimat istəsəniz, bəzi kitabxanaların mənbəyini araşdırmağa gəlirəm.

EDIT: Mən çıxmaq istəmirəm və serializasiya üçün öz üsullarınızı yazmağın pis olduğunu söyləmək istəmirəm, ancaq tətbiqiniz üçün yaxşı formalı JSON istifadə etmək vacibdirsə, onda siz "addiction" yükünü çəkməlisiniz xüsusi üsulların bir gün gözlənilmədiyi pis bir vəziyyətə rast gəlməsi ola bilər. Bu riskin məqbul olması olsun, bu sizin çağırışınızdır.

34
10 окт. Cavab 10 oktyabrda Adam Bellaire tərəfindən verilir . 2008-10-10 18:47 '08 at 18:47 2008-10-10 18:47

Bir yerdə tapdım. Xatırlaya bilmirəm, baxmayaraq ki ... bəlkə StackOverflow :)

 $.fn.serializeObject = function(){ var o = {}; var a = this.serializeArray(); $.each(a, function() { if (o[this.name]) { if (!o[this.name].push) { o[this.name] = [o[this.name]]; } o[this.name].push(this.value || ''); } else { o[this.name] = this.value || ''; } }); return o; }; 
26
02 янв. cavab jmort253 verildi 02 Jan 2011-01-02 10:57 '11 saat 10:57 'da 2011-01-02 10:57

Xarici kitabxanalardan istifadə etmək istəmirsinizsə, doğma bir JavaScript metodu var .toSource() , ancaq tam olaraq cross-browser deyil.

10
02 дек. Cavab Kain Haart tərəfindən verilir 02 Dekabr. 2009-12-02 00:44 '09 da 0:44 'da 2009-12-02 00:44

Ən yaxşı üsul JSON üçün polyfill obyektini təmin etməkdir.

JQuery adının içərisində JSON notation ( JSON üçün etibarlı dəyərlər) üçün obyekt serialize etmək üçün bir üsul yaratmaqda israr edirsinizsə, belə bir şey edə bilərsiniz:

İcra

 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); 
9
11 апр. cavab may ayı 11-ə verilir 2015-04-11 08:50 '15 at 8:50 2015-04-11 08:50

Bəli, JSON.stringify və JSON.parse "Json_PostData" ı $ çağırmadan əvvəl etməlisiniz.

$ .ajax ({ url: post_http_site,   növü: "POST",  data: JSON.parse (JSON.stringify (Json_PostData)),önbellek: yanlış, səhv: funksiya (xhr, ajaxOptions, thrownError) { alert ("json maddə yaz, Ajax səhvi yaz!" + xhr.status + "error =" + thrownError + "xhr.responseText =" + xhr.responseText); }, müvəffəqiyyət: funksiya (məlumat) { alert ("json maddə yaz, Ajax OK"); }  });
7
24 марта '16 в 6:50 2016-03-24 06:50 cavab martın 24-də saat 16: 06-da verilir (2016-03-24 06:50)

Bu əsasən iki addımlı bir prosesdir:

Birincisi, bu üslubu yerinə yetirmək lazımdır.

 var JSON_VAR = JSON.stringify(OBJECT_NAME, null, 2); 

Bundan sonra simli obyektə çevirmək lazımdır

 var obj = JSON.parse(JSON_VAR); 
7
29 июня '15 в 16:21 2015-06-29 16:21 Cavab Shrish Shrivastava tərəfindən 29 iyun 'da 4:21' də verilir. 2015-06-29 16:21

Yuxarıdakı həllər nəzərə alınmayan bir şey sizin giriş arrayınızdır, lakin yalnız bir dəyər verilmişdir.

Məsələn, arxa tərəf bir sıra insanları gözləyirsə, ancaq bu vəziyyətdə sadəcə bir şəxslə danışırsınız. Sonra da:

 <input type="hidden" name="People" value="Joe" /> 

Daha əvvəlki qərarlarla sadəcə bir şey ilə müqayisə ediləcəkdir:

 { "People" : "Joe" } 

Ancaq həqiqətən görünməlidir

 { "People" : [ "Joe" ] } 

Bunu düzəltmək üçün giriş belə olmalıdır:

 <input type="hidden" name="People[]" value="Joe" /> 

Və aşağıdakı funksiyadan istifadə edəcəyiniz (digər həllər əsasında, lakin bir qədər uzadılıb)

 $.fn.serializeObject = function() { var o = {}; var a = this.serializeArray(); $.each(a, function() { if (this.name.substr(-2) == "[]"){ this.name = this.name.substr(0, this.name.length - 2); o[this.name] = []; } if (o[this.name]) { if (!o[this.name].push) { o[this.name] = [o[this.name]]; } o[this.name].push(this.value || ''); } else { o[this.name] = this.value || ''; } }); return o; }; 
6
18 июня '14 в 18:49 2014-06-18 18:49 Cavab Tim Burkhart tərəfindən 18 İyun 2014 tarixində 6:49 2014-06-18 18:49 tarixində verilir

tags ilə bağlı digər suallar və ya bir sual