JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度, 那么,JSON到底是什么? JSON এবং JSONP সম্পর্কে।
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提供了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() ফাংশন ব্যবহার করে প্রক্রিয়া করার পর সমস্যা হতে পারে (সিনট্যাক্স ত্রুটি ছুঁড়ে ফেলবে)।
দ্বিতীয়ত, JSON অবজেক্টটিকে JSON স্ট্রিংয়ে রূপান্তর করার জন্য toJSONString() অথবা গ্লোবাল ফাংশন JSON.stringify() ব্যবহার করা যেতে পারে।
যেমন:
var last=obj.toJSONString(); //将JSON对象转化为JSON字符
অথবা:
var last=JSON.stringify(obj); //将JSON对象转化为JSON字符 alert(last);
সতর্কতা:
উপরের একাধিক পদ্ধতির মধ্যে, eval() ফাংশনটি js দ্বারা সরবরাহিত, অন্য সমস্ত পদ্ধতি json.js প্যাকেজ থেকে এসেছে। নতুন সংস্করণের JSON API পরিবর্তন করেছে, JSON.stringify() এবং JSON.parse() উভয় পদ্ধতিকে Javascript এর অন্তর্নিহিত অবজেক্টগুলিতে সংযুক্ত করেছে, প্রথমটি Object.toJSONString() এ পরিণত হয়েছে, এবং দ্বিতীয়টি String.parseJSON() এ পরিণত হয়েছে। যদি toJSONString() এবং parseJSON() পদ্ধতি পাওয়া না যায়, তাহলে আপনার json প্যাকেজের সংস্করণ খুব পুরানো।
ব্যাকরণ:
jQuery.getJSON(url,data,success(data,status,xhr))
প্যারামিটার:
প্যারামিটার | বর্ণনা |
---|---|
url | অবশ্যই। নির্দিষ্ট করুন কোন URL-এ অনুরোধ পাঠানো হবে। |
data | ঐচ্ছিক। সার্ভারে পাঠানো অনুরোধের সাথে যুক্ত তথ্য নির্ধারণ করে। |
success(data,status,xhr) |
可选。规定当请求成功时运行的函数。
额外的参数:
|
ব্যবহার কেস:
$.getJSON("test.js", function(json){ alert("JSON Data: " + json.users[3].name); });
这个需要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_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 কোডিং ব্যবহার করে, তখন এই বিষয়টি বিশেষভাবে লক্ষ্য করা উচিত।
দুই. সূচক অ্যারে এবং সম্বন্ধিত অ্যারে
পিএইচপি দুটি ধরনের অ্যারে সমর্থন করে, একটি হল শুধুমাত্র "মান" (value) সংরক্ষণকারী সূচক অ্যারে (indexed array), অন্যটি হল "নাম-মান জোড়া" (name/value) সংরক্ষণকারী সম্পর্কিত অ্যারে (associative array)। যেহেতু জাভাস্ক্রিপ্ট সম্পর্কিত অ্যারে সমর্থন করে না, তাই 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 );
তিন. শ্রেণীর রূপান্তর
নিচে একটি 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 সম্পর্কিত অ্যারে জোরপূর্বক তৈরি করতে চান, তাহলে json_decode() তে একটি প্যারামিটার true যোগ করতে হবে:
$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
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"])
ধন্যবাদ 【জাং ডংগুই】 সরবরাহ করা কোডের জন্য।
需要的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();
ধন্যবাদ【হুয়াং মিংহুই】দেওয়া কোডের জন্য।
需要的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, যা গৃহীত হবে সেটিতে আপনার ওয়েবসাইটের লিঙ্ক যোগ করা যেতে পারে।
আপনি সাম্প্রতিককালে ব্যবহার করেছেন: