الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

التعامل مع JSON

بدأه ahmed_youssef في 11 يونيو 2013 · 6 رد · 925 مشاهدة · في لغة Python
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع
JSON
 
سنتحدث اليوم عن صيغة JSON وهي إختصار ل Javascript Object Notation وهي صيغة تستخدم بكثرة في تبادل البيانات وخدمات الويب وكذلك في الإعدادات للبرامج وذلك لسهولتها كقراءة وإنشاء ومعالجة
 
 
فلننظر إلى مثال توضيحي
{"menu": {
    "header": "SVG Viewer",
    "items": [
        {"id": "Open"},
        {"id": "OpenNew", "label": "Open New"},
        null,
        {"id": "ZoomIn", "label": "Zoom In"},
        {"id": "ZoomOut", "label": "Zoom Out"},
        {"id": "OriginalView", "label": "Original View"},
        null,
        {"id": "Quality"},
        {"id": "Pause"},
        {"id": "Mute"},
        null,
        {"id": "Find", "label": "Find..."},
        {"id": "FindAgain", "label": "Find Again"},
        {"id": "Copy"},
        {"id": "CopyAgain", "label": "Copy Again"},
        {"id": "CopySVG", "label": "Copy SVG"},
        {"id": "ViewSVG", "label": "View SVG"},
        {"id": "ViewSource", "label": "View Source"},
        {"id": "SaveAs", "label": "Save As"},
        null,
        {"id": "Help"},
        {"id": "About", "label": "About Adobe CVG Viewer..."}
    ]
}}
 
وهذا المقابل له ب XML
 
<menu>
    <header>Adobe SVG Viewer</header>
    <item action="Open" id="Open">Open</item>
    <item action="OpenNew" id="OpenNew">Open New</item>
    <separator/>
    <item action="ZoomIn" id="ZoomIn">Zoom In</item>
    <item action="ZoomOut" id="ZoomOut">Zoom Out</item>
    <item action="OriginalView" id="OriginalView">Original View</item>
    <separator/>
    <item action="Quality" id="Quality">Quality</item>
    <item action="Pause" id="Pause">Pause</item>
    <item action="Mute" id="Mute">Mute</item>
    <separator/>
    <item action="Find" id="Find">Find...</item>
    <item action="FindAgain" id="FindAgain">Find Again</item>
    <item action="Copy" id="Copy">Copy</item>
    <item action="CopyAgain" id="CopyAgain">Copy Again</item>
    <item action="CopySVG" id="CopySVG">Copy SVG</item>
    <item action="ViewSVG" id="ViewSVG">View SVG</item>
    <item action="ViewSource" id="ViewSource">View Source</item>
    <item action="SaveAs" id="SaveAs">Save As</item>
    <separator/>
    <item action="Help" id="Help">Help</item>
    <item action="About" id="About">About Adobe CVG Viewer...</item>
</menu>
 
هناك فارق واضح في المقروئية 
 
الصيغة النحوية الخاصة ب JSON صغيرة والكثير يقوم بعملها كتدريب على عملية ال parsing
 
object
{}
{ members }
members
pair
pair , members
pair
string : value
array
[]
[ elements ]
elements
value 
value , elements
value
string
number
object
array
true
false
null
string
""
" chars "
chars
char
char chars
char
any-Unicode-character-
    except-"-or-\-or-
    control-character
\"
\\
\/
\b
\f
\n
\r
\t
\u four-hex-digits
number
int
int frac
int exp
int frac exp
int
digit
digit1-9 digits 
- digit
- digit1-9 digits
frac
. digits
exp
e digits
digits
digit
digit digits
e
e
e+
e-
E
E+
E-
 
أي كائن object هو مايوضع بين { } وهو عبارة عن مجموعة من العناصر المكونة من قيمة ومفتاح مفصولين ب : 
كما في القاموس dict في بايثون 
"key":"value"
 
Value
والقيمة قد تكون عبارة عن سلسلة نصية أو رقم أو كائن آخر أو مصفوفة أو قيم true, false, null
لاحظ المصفوفة هي مجموعة عناصر من أنواع القيم موضوعة بين [] 
 
*أنظر هنا: http://www.json.org/
 
الآن تعلمنا الصيغة النحوية ل json
 
كيف نقوم بمعالجة ملفات json ؟
 
سنقوم بإستخدام المثال المستخدم في توضيح المقروئية بالأعلى
 
 
 
json_string="""
{"menu": {
    "header": "SVG Viewer",
    "items": [
        {"id": "Open"},
        {"id": "OpenNew", "label": "Open New"},
        null,
        {"id": "ZoomIn", "label": "Zoom In"},
        {"id": "ZoomOut", "label": "Zoom Out"},
        {"id": "OriginalView", "label": "Original View"},
        null,
        {"id": "Quality"},
        {"id": "Pause"},
        {"id": "Mute"},
        null,
        {"id": "Find", "label": "Find..."},
        {"id": "FindAgain", "label": "Find Again"},
        {"id": "Copy"},
        {"id": "CopyAgain", "label": "Copy Again"},
        {"id": "CopySVG", "label": "Copy SVG"},
        {"id": "ViewSVG", "label": "View SVG"},
        {"id": "ViewSource", "label": "View Source"},
        {"id": "SaveAs", "label": "Save As"},
        null,
        {"id": "Help"},
        {"id": "About", "label": "About Adobe CVG Viewer..."}
    ]
}}
"""
 
بايثون توفرلنا مكتبة لمعالجة json قم بإستدعائها عبر 
import json
يوجد قاعدة عامة، في pickle وغيرها إذا أردت أن تحصل على الكائن من string أو تحوله إلى الصيغة المطلوبة قم بإضافة s للدالة المستخدمة لتصبح loads, dumps
أماإذا تريد التعامل عبر ملف فلاتستخدم ال s لتصبح load, dump
 
كما قمت بالتخمين .. الدالة loads قامت بتحويل النص json_string إلى قاموس dict لتستطيع استخدامه بطريقتك المعتادة في بايثون
>>> type(obj)<type 'dict'>
 
تستطيع إستخدامه بطريقتك المعتادة .. على سبيل المثال
 
>>> obj['menu']['header']
u'SVG Viewer'
>>> obj['menu']['items']
[{u'id': u'Open'}, {u'id': u'OpenNew', u'label': u'Open New'}, None, {u'id': u'ZoomIn', u'label': u'Zoom In'}, {u'id': u'ZoomOut', u'label': u'Zoom Out'}, {u'id': u'OriginalView', u'label': u'Original View'}, None, {u'id': u'Quality'}, {u'id': u'Pause'}, {u'id': u'Mute'}, None, {u'id': u'Find', u'label': u'Find...'}, {u'id': u'FindAgain', u'label': u'Find Again'}, {u'id': u'Copy'}, {u'id': u'CopyAgain', u'label': u'Copy Again'}, {u'id': u'CopySVG', u'label': u'Copy SVG'}, {u'id': u'ViewSVG', u'label': u'View SVG'}, {u'id': u'ViewSource', u'label': u'View Source'}, {u'id': u'SaveAs', u'label': u'Save As'}, None, {u'id': u'Help'}, {u'id': u'About', u'label': u'About Adobe CVG Viewer...'}]
 
>>> obj['menu']['header']='SVG VIEWER 2'
>>> obj['menu']['header']
'SVG VIEWER 2'
 
ولتحويله لصيغة json مرة أخرى قم بإستخدم dumps
>>> json.dumps(obj)
'{"menu": {"header": "SVG VIEWER 2", "items": [{"id": "Open"}, {"id": "OpenNew", "label": "Open New"}, null, {"id": "ZoomIn", "label": "Zoom In"}, {"id": "ZoomOut", "label": "Zoom Out"}, {"id": "OriginalView", "label": "Original View"}, null, {"id": "Quality"}, {"id": "Pause"}, {"id": "Mute"}, null, {"id": "Find", "label": "Find..."}, {"id": "FindAgain", "label": "Find Again"}, {"id": "Copy"}, {"id": "CopyAgain", "label": "Copy Again"}, {"id": "CopySVG", "label": "Copy SVG"}, {"id": "ViewSVG", "label": "View SVG"}, {"id": "ViewSource", "label": "View Source"}, {"id": "SaveAs", "label": "Save As"}, null, {"id": "Help"}, {"id": "About", "label": "About Adobe CVG Viewer..."}]}}'

 

 
مصادر :
 

تم تعديل هذه المشاركة بواسطة ahmed_youssef في 19 يونيو 2013 في 13:49

1
(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#2

ممكن تذكر الطريقة او مفهومها في التعامل مع الويب

تم تعديل هذه المشاركة بواسطة MuStafa - HaSsan في 11 يونيو 2013 في 23:02

salah.jpg

#3

تقصد التعامل مع ال web services و ajax requests!؟

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#4
مثلا عندما تقوم بعمل Ajax Request 

فانه يمكنك طلب معلومات معينة من السيرفر واستقبال النتيجة على شكل Json

ثم تحديث جزء من الصفحة بواسطة المعلومات الاخيرة دون تحديث الصفحة كاملة

تم تعديل هذه المشاركة بواسطة med reda في 12 يونيو 2013 في 01:31

#5

صراحة ﻻ افهمها اﻻ بعد تطبيقها فهل لي مصادر !!

salah.jpg

#6

هل تقصد مثال عن Ajax request

#7

لا فهمتها اشكرك اخي ,

تم تعديل هذه المشاركة بواسطة MuStafa - HaSsan في 13 يونيو 2013 في 12:19

salah.jpg

مواضيع مشابهة