أعطني مثالًا.

JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度, 那么,JSON到底是什么? حول JSON و JSONP.

طرق التعامل مع JSON في جافا سكريبت

var str1 = '{ "name": "cxh", "sex": "man" }';
var data=eval("("+str1+")");//转换为json对象//data =(new
alert (data.name);//会显示出cxh

不过eval解析json有安全隐患!
现在大多数浏览器(IE8及以上,Chrome和Firefox差不多全部)自带原生JSON对象,提供JSON.parse()方法解析JSON,提供JSON.stringify()方法生成JSON,请使用这两个方法!
如果担心parse()对对象抛异常,可以加一个封装函数:

JSON.pParse = function( tar ) {
    if( typeof( tar ) === 'string' ) {
        return JSON.parse( tar );
    } else {
        return tar;
    }
};

شكراً لـ oschina على تقديم طريقة التعديل.

طرق التعامل مع JSON في json.js

为了方便地处理JSON数据,JSON提供了json.js包,下载地址: http://lib.sinaapp.com/js/json2/json2.js

في عملية نقل البيانات، يتم نقل JSON بشكل نصي، أي كـ سلسلة، بينما تقوم JS بمعالجة كائنات JSON، لذا فإن التحويل المتبادل بين كائن JSON وسلسلة JSON هو أمر حاسم. على سبيل المثال:

سلسلة JSON:

var str1 = '{ "name": "cxh", "sex": "man" }';

كائن JSON:

var str2 = { "name": "cxh", "sex": "man" };

تحويل سلسلة JSON إلى كائن JSON

لتحويل str1 أعلاه إلى كائن JSON ، يجب استخدام ما يلي:

var obj = eval('(' + str + ')');//由JSON字符串转换为JSON对象

أو:

var obj = str.parseJSON(); //由JSON字符串转换为JSON对象

أو:

var obj = JSON.parse(str); //由JSON字符串转换为JSON对象

ثم يمكن قراءة ذلك بهذه الطريقة:

Alert(obj.name);
Alert(obj.sex);

ملاحظة خاصة: إذا كان obj في الأصل كائن JSON، فإن استخدام دالة eval() لتحويله (حتى لو تم التحويل عدة مرات) سيظل كائن JSON، ولكن عند استخدام دالة parseJSON() لمعالجته، سيكون هناك تساؤل (سيتم طرح استثناء نحوي).

ثانياً، يمكن استخدام toJSONString() أو الدالة العالمية JSON.stringify() لتحويل كائن JSON إلى سلسلة JSON.

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

var last=obj.toJSONString(); //将JSON对象转化为JSON字符

أو:

var last=JSON.stringify(obj); //将JSON对象转化为JSON字符
alert(last);

انتباه:

في العديد من النقاط المذكورة أعلاه، باستثناء دالة eval() التي تأتي مع JavaScript، فإن النقاط الأخرى تأتي من حزمة json.js. النسخة الجديدة من JSON قامت بتعديل واجهة البرمجة، حيث تم إدخال دالتي JSON.stringify() و JSON.parse() داخل الكائنات المدمجة في JavaScript، حيث أصبحت الأولى Object.toJSONString() والثانية String.parseJSON(). إذا ظهرت لك رسالة تفيد بعدم العثور على دالة toJSONString() و parseJSON()، فهذا يعني أن إصدار حزمة json لديك قديم جداً.

طريقة الحصول على JSON باستخدام JQuery

النحو:

jQuery.getJSON(url,data,success(data,status,xhr))

المعلمات:

معامل وصف
url ضروري. يجب تحديد عنوان URL الذي سيتم إرسال الطلب إليه.
data اختياري. يحدد البيانات المرسلة إلى الخادم مع الطلب.
success(data,status,xhr) 可选。规定当请求成功时运行的函数。
额外的参数:
  • الاستجابة - تحتوي على بيانات نتيجة الطلب
  • الحالة - تشمل حالة الطلب
  • xhr - يحتوي على كائن XMLHttpRequest

حالة الاستخدام:

$.getJSON("test.js", function(json){ alert("JSON Data: " + json.users[3].name); });

طرق التعامل مع JSON في جافا

这个需要json-lib.jar包支持 该jar下载地址: اضغط للتنزيل

//JSON对象 JSONObject的使用
String str1 = "{ 'name': 'cxh', 'sex': '1' }";
JSONObject obj = JSONObject.fromObject(str1);
String name = obj.getString("name"); //直接返回字符串型 cxh
Object nameo = obj.get("name"); //直接返回对象型的cxh
int age = obj.getInt("sex"); //直接返回int型的sex

//JSON数组对象 JSONArray的运用
String jsonArrStr = "[{ 'name': 'cxh', 'sex': '1','website':'http://www.bejson.com' },{ 'name': '三少', 'sex': '1','website':'http://www.ij2ee.com' }]";
JSONArray array = JSONArray.fromObject(jsonArrStr);
int size = array.size(); //获取JSON数组大小
JSONObject jo = array.getJSONObject(0);//取第一个JSON对象
for(int i=0;i<size;i++){
    JSONObject jo1 = array.getJSONObject(i);
    System.out.println(jo1.getString("website")); //循环返回网址
}

//序列化Bean对象为JSON对象
User user = new User();
user.setName("cxh");
user.setSex(1);
user.setWebsite("http://www.bejson.com");
JSONObject jo2 =  JSONObject.fromObject(user);
System.out.println(jo2.toString()); //则会输出 { 'name': 'cxh', 'sex': '1','website':'http://www.bejson.com' }

طرق التعامل مع JSON في PHP

١. json_encode()

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

$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
echo json_encode($arr);

النتيجة هي:

{"a":1,"b":2,"c":3,"d":4,"e":5}

إليك مثال آخر على تحويل الكائنات:

$obj->body = 'another post';
$obj->id = 21;
$obj->approved = true;
$obj->favorite_count = 1;
$obj->status = NULL;
echo json_encode($obj);

النتيجة هي:

{
"body":"another post",
"id":21,
"approved":true,
"favorite_count":1,
"status":null
}

نظرًا لأن JSON يقبل فقط الأحرف المشفرة بتنسيق UTF-8، يجب أن تكون معلمات json_encode() مشفرة بتنسيق UTF-8، وإلا فسوف تحصل على أحرف فارغة أو null. يجب أن تكون هذه النقطة موضع اهتمام خاص عندما يتم استخدام الترميز GB2312 للصينية، أو الترميز ISO-8859-1 للغات الأجنبية.

ثانياً، مصفوفات الفهرس والمصفوفات المرتبطة

يدعم PHP نوعين من المصفوفات، أحدهما هو مصفوفة فهرسية (indexed array) تحتفظ بـ "القيم" فقط، والآخر هو مصفوفة مرتبطة (associative array) تحتفظ بـ "أزواج الاسم/القيمة" (name/value). نظرًا لأن JavaScript لا يدعم المصفوفات المرتبطة، فإن json_encode() يقوم بتحويل المصفوفات الفهرسية (indexed array) فقط إلى تنسيق مصفوفة، بينما يقوم بتحويل المصفوفات المرتبطة (associative array) إلى تنسيق كائن. على سبيل المثال، لدينا الآن مصفوفة فهرسية.

$arr = Array('one', 'two', 'three');
echo json_encode($arr);

النتيجة هي:

["one","two","three"]

إذا تم تحويله إلى مصفوفة مرتبطة:

$arr = Array('1'=>'one', '2'=>'two', '3'=>'three');
echo json_encode($arr);

تغيرت النتيجة:

{"1":"one","2":"two","3":"three"}

注意,数据格式从"[]"(数组)变成了"{}"(对象)。
如果你需要将"索引数组"强制转化成"对象",可以这样写:

json_encode( (object)$arr );

أو:

json_encode ( $arr, JSON_FORCE_OBJECT );

تحويل الفئات (class)

إليك فئة PHP:

class Foo {
    const ERROR_CODE = '404';
    public $public_ex = 'this is public';
    private $private_ex = 'this is private!';
    protected $protected_ex = 'this should be protected';
    public function getErrorCode() {
        return self::ERROR_CODE;
    }
}

الآن، قم بتحويل مثيل من هذا النوع إلى JSON:

$foo = new Foo;
$foo_json = json_encode($foo);
echo $foo_json;

نتيجة الإخراج هي:

{"public_ex":"this is public"}

يمكن رؤية أنه باستثناء المتغيرات العامة (public)، فإن الأشياء الأخرى (مثل الثوابت، المتغيرات الخاصة، الطرق، وما إلى ذلك) قد فقدت.

أربعة، json_decode()

تُستخدم هذه الدالة لتحويل نص JSON إلى الهيكل البيانات المناسب في PHP. إليك مثال:

$json = '{"foo": 12345}';
$obj = json_decode($json);
print $obj->{'foo'}; // 12345

عادةً ما ترجع json_decode() كائن PHP وليس مصفوفة. على سبيل المثال:

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));

النتيجة هي إنشاء كائن PHP:

object(stdClass)#1 (5) {
["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

إذا كنت ترغب في إجبار إنشاء مصفوفة مرتبطة في PHP، يجب إضافة معامل true إلى json_decode().

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json,true));

نتيجة ذلك هي إنشاء مصفوفة مرتبطة:

array(5) {
["a"] => int(1)
     ["b"] => int(2)
     ["c"] => int(3)
     ["d"] => int(4)
     ["e"] => int(5)
}

الأخطاء الشائعة في json_decode()

$bad_json = "{ 'bar': 'baz' }";
$bad_json = '{ bar: "baz" }';
$bad_json = '{ "bar": "baz", }';

对这三个字符串执行json_decode()都将返回null,并且报错。
第一个的错误是,json的分隔符(delimiter)只允许使用双引号,不能使用单引号。第二个的错误是,json名值对的"名"(冒号左边的部分),任何情况下都必须使用双引号。第三个的错误是,最后一个值之后不能添加逗号(trailing comma)。
另外,json只能用来表示对象(object)和数组(array),如果对一个字符串或数值使用json_decode(),将会返回null。

var_dump(json_decode("Hello World")); //null

طرق التعامل مع json في بايثون

import json

str1 = '{ "name": "cxh", "sex": "1" }'
# 或者
# str1 = """{ "name": "cxh", "sex": "1" }"""
# 或者
# str1 = "{ \"name\": \"cxh\", \"sex\": \"1\" }"

obj = json.loads(str1)
print(obj["name"])
print(obj["sex"])

# 由于出现中文,记得文件头加入 # coding:utf8
json_arr_str = """[{ "name": "cxh", "sex": "1","website":"http://www.bejson.com" },{ "name": "我的", "sex": "1","website":"http://www.bejson.com" }]"""

arr = json.loads(json_arr_str)

for o in arr:
    print(o["name"])
    print(o["sex"])
    print(o["website"])

شكراً لك 【تشينغ دونغغوي】 على توفير الكود.

طرق التعامل مع JSON في C#

需要的dll:Newtonsoft.Json.dll, تحميل DLL من الموقع الرسمي

//读取简单的json
string json="{\"username\":\"张三\"}";
string username = string.Empty;
JObject jObj=JObject.Parse(json); //进行格式化
username = jObj["username"].ToString();
Console.WriteLine(username);


//读取嵌套对象的json
json = "{\"username\":\"张三\",data:{\"address\":\"福建厦门\"}}";
jObj = JObject.Parse(json);
string address = string.Empty;
address = jObj["data"]["address"].ToString();
Console.WriteLine(address);

//读取数组,操作方式与数组类似
json = "{\"username\":\"张三\",data:[{\"address\":\"福建厦门\"},{\"address\":\"福建福州\"}]}";
jObj = JObject.Parse(json);
 address = string.Empty;
address = jObj["data"][0]["address"].ToString()+","+ jObj["data"][1]["address"].ToString();
Console.WriteLine(address);

Console.ReadLine();

شكراً لـ【هوانغ مينغهوي】على توفير الشيفرة.

طرق التعامل مع JSON في Objective-C

需要的dll:Newtonsoft.Json.dll, تحميل DLL من الموقع الرسمي

//JSON字符串转字典:
NSString *str1 = @"{\"name\":\"cxh\",\"sex\":\"1\"}";
NSData *jsonData1 = [str1 dataUsingEncoding:NSUTF8StringEncoding];
NSError *error1;
NSDictionary *jsonDic = [NSJSONSerialization JSONObjectWithData:jsonData1 options:NSJSONReadingMutableContainers error:&error1];
/*
 NSJSONReadingMutableContainers 创建结果为可变数组/字典
 NSJSONReadingMutableLeaves 创建结果中字符串是可变字符串
 NSJSONReadingAllowFragments 允许json最外层不是数组或字典
 */
if (!error1) {
	NSLog(@"jsonDic is:%@",jsonDic);
}
else{
	NSLog(@"error:%@",error1);
}

//字典转JSON字符串
NSError *error2 = nil;
NSData *jsonData2 = [NSJSONSerialization dataWithJSONObject:jsonDic options:NSJSONWritingPrettyPrinted error:&error2];
if (!error2) {
	NSString *str2 = [[NSString alloc] initWithData:jsonData2 encoding:NSUTF8StringEncoding];
	NSLog(@"json string is:%@",str2);
}
else{
	NSLog(@"error:%@",error2);
}

آخرون

إذا كان لديك أي شيء إضافي، يرجى إرسال الشيفرة والمكتبات المطلوبة إلى بريدي الإلكتروني ij2ee@139.com، ويمكن إضافة رابط موقعك إذا تم اعتمادها.

لقد استخدمت مؤخرًا:

جمع قائمة الطعام QQ