Home >  > JSON ئۆگېنىش خاتىرىسى

JSON ئۆگېنىش خاتىرىسى

17

پىروگىرامما ساھەسىدە JSON دىن ئىبارەت، تەرتىپلەشتۈرۈلگەن سانلىق مەلۇمات بىر تەرەپ قىلىش تېخنىكىسىنى ئايىماي ئىشلىتىپ كېلىۋاتىمىز. تۆۋەندە پىقىرنىڭ بۇنى چوڭقۇرلاپ ئۆگېنىش جەريانىدىكى ئاددىي خاتىرىلىرى يىغىنچاقلاپ  تەييارلاندى.


JSON  -  تولۇق ئىسمى JavaScript Object Notation (يەنى JavaScript ئوبىكتلارنى ئىپادىلەش ئۇسسۇلى). ئۇ JavaScript نىڭ ئوبىكتلارنى ئىپادىلەشىگە ئوخشاش ئۇسسۇلدا مەلۇمات(数据) لارنى ئىپادىلىيەلەيدۇ. گەرچە JSON نىڭ پەيدا بولۇشى JavaScript بىلەن زىچ مۇناسىۋەتلىك بولسىمۇ، بىراق JSON نى يەنىلا JavaScript نىڭ بىر قىسمى دېيىشكە بولمايدۇ. چۈنكى، نۇرغۇنلىغان پىروگىرامما تىللىرى JSON نى يېشىش(解析) ۋە تەرتىپلەشتۈرۈش (序列化) مەشغۇلاتىنى قوللايدۇ، شۇنداقلا ئۇ ئايرىم بىر تېخنىكا سۈپىتىدە ھەرقايسى ساھەلەردە كەڭ قوللىنىلىدۇ.

JSON نىڭ گىرامماتىكىسى

JSON تۆۋەندىكى ئۈچ تېپتىكى قىممەتلەرنى ئىپادىلىيەلەيدۇ:

  • ئاددى قىممەتلەر
  • ئوبىكتلار
  • سان گۇرۇپپىلىرى

ئاددى قىممەتلەر - ھەرپ زەنجىرى، سانلار، ھۆكۈم قىممەتلىرى (布尔类型) ۋە Null نى ئۆز ئىچىگە ئالىدۇ. لېكىن JSON ئادەتتە JavaScript تىكى بىر ئالاھىدە قىممەت undefinde نى قوللاپ بېرەلمەيدۇ.
ئوبىكتلار - خۇددى JavaScript نىڭ ئوبىكىتلىرىغا ئوخشىشىپ كېتىدۇ. يەنى تەرتىپلەشتۈرۈلمىگەن ئاچقۇچ - قىممەت (Key-Vlaue) گۇرۇپپىلىرىنى كۆرسېتىدۇ. ئاچقۇچ - قىممەت گۇرۇپپىلىرىدىكى قىممەت ئاددى قىممەت بولسىمۇ، ئوبىكت ياكى مىقدار گۇرۇپپىسى بولسىمۇ بولىدۇ.
سان گۇرۇپپىلىرى - JavaScript نىڭ سان گۇرۇپپىلىرى بىلەن ئوخشاش بولغان، بىر گۇرۇپپا تەرتىپلىك قىممەتلەردىن ئىبارەت. سان گۇرۇپپىلىرى ئادەتتە ئاددى قىممەت ، ئوبىكىت ياكى سان گۇرۇپپىلىرىدىن تۈزۈلگەن بولسا بولىدۇ.
مىسال:

{
    "name": "Teshna",
    "age": 24,
    "address": {
        "province": "BeiJing",
        "city": "BeiJing"
    },
    "friends": ["bc", "cc", "dc"],
    "blog": ""
}

دېققەت قىلىشقا تېگىشلىكى، شۇنداقلا JavaScript دا ئوبىكتلارنى ئىپادىلەشكە ئوخشىمايدىغان بىر يىرى JSON ھەرپ زەنجىرىدىكى ئوبىكتلار خاسلىقلىرىنى چوقۇم قوش تىرناق ئىچىگە ئېلىش كېرەك. يەنى:

// توغرا بولغان ئۇسسۇل
{
    "name": "acwong"
}
// خاتا ئۇسسۇل
{
    name: "acwong"
}
// يالاڭ تىرناقمۇ خاتا
{
    'name': 'acwong'
}

JSON ئوبىكتى ۋە JavaScript

JSON دەسلىپىدە بارلىققا كەلگەن مەزگىللەردە، JavaScript ئارقىلىق  JSON نى بىر تەرەپ قىلشتا ئاساسلىقى eval() فۇنكىسىيەسى ئىشلىتىلەتتى. eval() فۇنكىسىيەسى JSON مەلۇماتلىرىنى يەشكەندىن كېيىن JavaScript سان گۇرۇپپىلىرى شەكلىدە قايتۇراتتى. بىراق eval() نى ئىشلەتكەندە تازا بىخەتەر بولمىغايچقا ، EMCAScript 5 دىن باشلاپ،  JavaScript قا پۈتۈنلەي يېڭىدىن مەخسۇس JSON ئوبىكتى قوشۇلدى.

JSON نى تەرتىپلەش(序列化)

JavaScript دە ئادەتتە JSON ئوبىكتىنىڭ stringify() ئۇسسۇلى ئارقىلىق JSON نى تەرتىپلەشتۈرىمىز. مەسىلەن:

var person = {
    name: "Teshna",
    age: 24,
    address: {
        province: "BeiJinf",
        city: "BeiJing"
    },
    friends: ["bc", "cc", "dc"],
    blog: ""
};
var jsonText = JSON.stringify(person);
console.log(jsonText);
// {"name":"Teshna","age":24,"address":{"province":"BeiJing","city":"BeiJing"},"friends":["bc","cc","dc"],"blog":""}

JSON.stringify() سۈكۈتتىكى ھالەتتە قايتۇرىدىغان JSON ھەرپ زەنجىرى بوش ئورۇن ياكى ئالدىغا سۈرۈش بەلگىلىرىنى ئۆز ئىچىگە ئالمايدۇ.
ئەگەر JavaScript ئوبىكتلىرىدا JSON قوللىمايدىغان شەكىللەر بولسا(مەسىلەن: undefined فۇنكىسىيەسى) stringigy() ئۇسسۇلى تەرىپىدىن ئاپتوماتىك سۈزۈۋىتىلىدۇ. مەسىلەن:

var person = {
    name: "teshna",
    blog: undefined,
    todo: function() {
        return "sleep";
    }
};
var jsonText = JSON.stringify(person);
console.log(jsonText);
// {"name":"teshna"}

JSON.stringify() ئۇسسۇلىنىڭ ئۈچ پارامىتىرى بار بولۇپ:  بىرىنچىسى،  تەرتىپلەشتۈرۈلىدىغان JavaScript ئوبىكتى؛ ئىككىنچىسى بەزى مەلۇماتلارنى سۈزۈۋىتىش ئىقتىدارى تەمىنلەيدىغان پارامىتىر؛ ئۈچىنچىسى بولسا، قايتۇرىدىغان ھەرپ زەنجىرىنى ئالدىغا سۈرۈش ئىقتىدارى تەمىنلەيدىغان پارامىتىر.
قايتۇرىدىغان نەتىجىلەردىن بەزى مەلۇماتلارنى سۈزۈۋىتىپ كۆرسېتىش
يۇقىرىدا دېگىنىمىزدەك، ئىككىنچى پارامىتىر دەل سۈزگۈچلۈك رولىنى ئۆتەيدۇ. ئىككىنچى پارامىتىرغا بەلگىلەنگىنى سان گۇرۇپپىسى بولغىنىدا، قايتۇرۇلۇدىغان JSON ھەرپ زەنجىرىدە پەقەت موشۇ سان گۇرۇپپىسىدا بەلگىلەنگەن خاسلىقلارلا كۆرسىتىلىدۇ. مەسىلەن:

var person = {
    name: "teshna",
    age: 24,
    address: {
        province: "BeiJing",
        city: "BeiJing"
    },
    friends: ["bc", "cc", "dc"],
    blog: ""
};
var jsonText = JSON.stringify(person, ["name","blog"]);
console.log(jsonText);
// {"name":"teshna","blog":""}

ئىككىنچى پارامىتىرغا بەلگىلەنگىنى بىر فونكىسىيە بولسا، يەنە كېلىپ فۇنكىسىيەنىڭ ئىككى پارامىتىرى بار بولسا، يەنى JavaScript ئوبىكتلىرىنىڭ خاسلىق نامى ۋە قىممىتىدىن ئىبارەت ئىككى پارامىتىرى بولسا، ئۇنداقتا قايتۇرۇلىدىغان JSON ھەرپ زەنجىرى بۇ فۇنكىسىيەدىن قايتۇرۇلىدىغان پارامىتىرلارنىڭ تەسىرىگە ئۇچىرايدۇ. مەسىلەن:

//  person obektini qisqartish
var jsonText = JSON.stringify(person, function(key, value) {
    if (key === "name") {
        return "alim";
    } else if (key === "age") {
        value++;
        return value;
    } else {
        return value;
    }
});
console.log(jsonText);
// {"name":"alim","age":24,"address":{"province":"BeiJing","city":"BeiJing"},"friends":["bc","cc","dc"],"blog":""}

قايتۇرۇلۇدىغان ھەرپ زەنجىرىنى ئالدىغا سۈرۈش

ئۈچىنچى پارامىتىرنىڭ قايتۇرۇدىغان ھەرپ زەنجىرىنى ئالدىغا سۈرۈش رولى بارلىقىنى كۆرۈپ ئۆتكەن ئىدۇق. ئۈچىنچى پارامىتىرغا سان بەلگىلىگىنىدە، قايتۇرىلىدىغان ھەرپ زەنجىرى مەزكۇر سان قىممىتىدە ئالدىغا سۈرۈلىدۇ. مەسىلەن:

//  person obekti yuqiriqi bilen oxshash
var jsonText = JSON.stringify(person, null, 2);
console.log(jsonText);

نەتىجىسى تۆۋەندىكىدەك بولىدۇ:

// netije
{
  "name": "Teshna",
  "age": 24,
  "address": {
    "province": "BeiJing",
    "city": "BeiJing"
  },
  "friends": [
    "bc",
    "cc",
    "dc"
  ],
  "blog": ""
}

يەنى ھەربىر قايتۇرۇلغان قىممەتنىڭ ئالدىدا 2 دىن بوش ئورۇن قالدۇرۇلغان.
ئۈچىنچى پارامىتىرغا بەلگىلەنگىنى مەلۇم ھەرپ زەنجىرى بولغىنىدا، قايتۇرۇلغان نەتىجىلەر موشۇ ھەرپ زەنجىرىدىكى بەلگىلەرنى ئالدىغا سۈرۈش بەلگىسى قىلىپ ئىشلىتىدۇ. مەسىلەن:

//  person obekti yuqirigha oxshash
//  * belgisi arqiliq aldigha sureyli
var jsonText = JSON.stringify(person, null, "*");
console.log(jsonText);

نەتىجىسى خۇددى مۇنداق:

// netije
 {
*"name": "Teshna",
*"age": 24,
*"address": {
**"province": "BeiJing",
**"city": "BeiJing"
*},
*"friends": [
**"bc",
**"cc",
**"dc"
*],
*"blog": ""
}

يەنە مەسىلەن:

 //  person obekti yuqirigha oxshash
//  jediwel belgisi (Tab) ishletkende
var jsonText = JSON.stringify(person, null, "\t");
console.log(jsonText);

نەتىجىسى مۇنداق:

// netije
 {
	"name": "Teshna",
	"age": 24,
	"address": {
		"province": "BeiJing",
		"city": "BeiJing"
	},
	"friends": [
		"bc",
		"cc",
		"dc"
	],
	"blog": ""
}

خاسلاشتۇرۇلغان تەرتىپلەشتۈرۈش

ئەگەر يۇقىرىقى ئۇسسۇللار ئىھتىياجنى قامدىيالمىسا، ئۇنداقتا تەرتىپلەشتۈرمەكچى بولغان JavaScript ئوبىكتىغا toJSON() فۇنكىسيەسىنى قوشۇپ، خالىغان شەكىلدە قىممەت قايتۇرۇشقا بولىدۇ. مەسىلەن:

var person = {
    name: "Teshna",
    age: 24,
    address: {
        province: "BeiJing",
        city: "BeiJing"
    },
    friends: ["bc", "cc", "dc"],
    blog: "",
    toJSON: function() {
        this.name = "Alim";
        return "Abdulla " + this.name;
    }
};
var jsonText = JSON.stringify(person);
console.log(jsonText);
//  "Abdulla Alim"

JSON نى يېشىش

JavaScript دا ئادەتتە JSON ئوبىكتىنىڭ parse() فۇنكىسىيەسى ئارقىلىق JSON نى يېشىدۇ. مەسىلەن تۆۋەندىكىدەك:

var jsonText = '{"name":"Teshna","age":24,"address":{"province":"BeiJing","city":"BeiJing"},"friends":["bc","cc","dc"],"blog":""}';
var person = JSON.parse(jsonText);
console.log(person);

نەتىجىسى تۆۋەندىكىدەك:

json_parse_function

JSON نىڭ قولاي تەرەپلىرى

1. XML گە ئوخشاش مۇرەككەپ بولغان مەلۇمات قۇرۇلمىسىنى ئۈنۈملۈك ئىپادىلەپ بېرىشكە قادىر.
2. XML گە قارىغاندا تولىمۇ يىنىك.
3. گىرامماتىكىسى ئاددى ھەم چۈشىنىشلىك.
4. ئۆزى يىنىك بولغاچقا، ئالماشتۇرۇش جەريانىدا ئىگەللەيدىغان مەنبە نىسبەتەن ئاز بولىدۇ، مۇازىمىتىرغا چۈشىدىغان بېسىممۇ مۇناسىپ تۆۋەن بولىدۇ.


پايدىلانغان مەنبەلەر:
1. JavaScript高级程序设计(第3版)

بۇلارنىمۇ ياقتۇرۇپ قالىسىز

ئۆز - ئۆزۈمنى ئىزدەش بوسۇغىسىدا...


ئۈنچىلەر (17)
نەقىللەر (0)
  1. ئارىف [ جۇغلانما: 2 نومۇر ] Firefox 36.0Windows 7 دىۋان 2015/03/07 04:40

    ھارمىغايسىز تەشنا باي….باسقان ھەرقەدەملىرىڭىزگەمەرھابائۇتۇقلاربولسۇن…….

  2. ئالتۇن بۇلاق [ جۇغلانما: 36 نومۇر ] Google Chrome 41.0.2272.76Windows 8 گىلەم 2015/03/07 08:38

    تەشقاجون! Json دىگەننى يىرتىۋىتىدىغان بوپ كىتىپسىز ھە! :lol:

  3. ئۇيغۇربەگ [ جۇغلانما: 29 نومۇر ] Google Chrome 41.0.2272.76Mac OSX 10_10_2 كىگىز 2015/03/08 11:20

    JSONنى iOS ئەپ ئېچىشنى ئۆگىنىش جەريانىدا ئۇچراتتىم، نورمالدا ئەپلەرنىڭ توردىكى مەزمۇنلارنى تارتىپ ئېلىشىدا مۇشۇ تىلدىن پايدىلىنىدىكەن، قارىسام چۈشۈنۈشلۈك ۋە ئاددى تۇيۇلدى ئەمما ئىچكىرىلەپ تەتقىق قىلىشقا تېخى قادىر بولالمىدىم.

    قېنى سىلى بىر ھەھۇ دەپ باقسىلا….

  4. ئارىف [ جۇغلانما: 6 نومۇر ] Google Chrome 40.0.2214.115Windows 8 4 -قەۋەت 2015/03/09 04:23

    چۈشنىشلىك ھەم ئىسىل ئۇگۈنۇش خاتىرىسى بوپتۇ……داۋامىنى كۆرۈشنى ئىستەيمەن قېرىندىشىم. :smile:

  5. دوغاپ [ جۇغلانما: 40 نومۇر ] Google Chrome 41.0.2243.0Windows 8 5 -قەۋەت 2015/03/09 14:33

    مەنزىلنىڭ كېيىنكى كومپيۇتېر نۇسقىسىغا API يېزىپ باقماقچى بولغان ئىدىم. مۇشۇنىڭدىن پايدىلىنىشنى لايىق تاپقان ئىدىم.

  6. ئابدۇغاپپا [ جۇغلانما: 1 نومۇر ] Google Chrome 40.0.2214.94Windows 7 6 -قەۋەت 2015/03/11 09:29

    بەك ياخشى تېما بوپتۇ داۋاملىق تىرېشىڭ :lol: :lol:

  7. ئالتۇن بۇلاق [ جۇغلانما: 36 نومۇر ] Google Chrome 41.0.2272.76Windows 8 7 -قەۋەت 2015/03/14 06:53

    مەن ئارقا بەتكە كىرەلمىدىم، مەخپى نۇمۇرۇمنى ئۇنتۇپ قاپتىمەن، يوللاپ بىرەلەرسىزمۇ؟

  8. مېغىز [ جۇغلانما: 9 نومۇر ] Google Chrome 40.0.2214.111Windows 7 8 -قەۋەت 2015/05/09 12:55

    ياخشى تىمىكەن. مەندەك يېڭى ياچاقلارغا تازا باب كەلگۈدەك. بولسا مۇشۇ پ خ پ تەرەپتىنمۇ بىر تىما يازغان بولسىڭىز، ياخشى بولاتتىكەن.

  9. نىشان [ جۇغلانما: 2 نومۇر ] Google Chrome 42.0.2311.152Windows 7 9 -قەۋەت 23 سائەت بۇرۇن

    Json دەپ بەك كۆپ ئاڭلاپ كەتتىم …. لىكىن ھازىرغىچە نىمىگە ئىشلىتىدىغاننى تازا ئېنىق ئايدىڭلاشتۇرالمىدىم …… بولسا مەلۇم بىر ئەمەلى مەسلە ئارقىلىق چۈشەنچە بەرگەن بولسىڭىز ….. ياكى مۇشۇ توغۇرلۇق بىر سىن دەرسلىكى ئىشلەپ قويسىڭىز …. ھەقلىق بولسىمۇ مەيلى سېتىۋالاتتىم ……..
    چچ: 614409814

  • كۆچۈرۈلمە يوق

ئۈنچە قالدۇرۇش