JSON数据解析
JSON(JavaScript 对象表示法)是一种轻量级数据交换格式。 它基于 ECMAScript 的一个子集。 JSON 使用完全与语言无关的文本格式,并且还使用类似于 C 语言家族(包括 C、C++、C#、Java、JavaScript、Perl、Python 等)的约定。 这一特性使得 JSON 成为一种理想的数据交换语言。 便于人读写,也便于机器解析生成(通常用于提高网络传输速度)。
JSON 的规则很简单:对象是“名称/值对”的无序集合。 对象以“{”(左括号)开头,以“}”(右括号)结束。 每个“名称”后跟一个“:”(引号); “‘名称/值’对”之间用“,”(冒号)分隔。具体细节参考
举一个简单的例子:
js代码
function showJSON() {
var user = {
"username": "andy",
"age": 20,
"info": {
"tel": "123456",
"cellphone": "98765"
},
"address": [{
"city": "beijing",
"postcode": "222333"
}, {
"city": "newyork",
"postcode": "555666"
}
]
}
alert(user.username);
alert(user.age);
alert(user.info.cellphone);
alert(user.address[0].city);
alert(user.address[0].postcode);
}
这表示具有用户名、年龄、信息、地址等属性的用户对象。
也可以使用JSON简单改变数据,改变里面的例子得到:
js代码
function showJSON() {
var user = {
"username": "andy",
"age": 20,
"info": {
"tel": "123456",
"cellphone": "98765"
},
"address": [{
"city": "beijing",
"postcode": "222333"
}, {
"city": "newyork",
"postcode": "555666"
}
]
}
alert(user.username);
alert(user.age);
alert(user.info.cellphone);
alert(user.address[0].city);
alert(user.address[0].postcode);
user.username = "Tom";
alert(user.username);
}
showJSON()
JSON 提供了 json.js 包。 下载并导入后,您可以简单地使用object.toJSONString()将其转换为JSON数据。
js代码
function showCar() {
var carr = new Car("Dodge", "Coronet R/T", 1968, "yellow");
alert(carr.toJSONString());
}
function Car(make, model, year, color) {
this.make = make;
this.model = model;
this.year = year;
this.color = color;
}
您可以使用eval将 JSON 字符转换为对象
js代码
function myEval() {
var str = '{ "name": "Violet", "occupation": "character" }';
var obj = eval('(' + str + ')');
alert(obj.toJSONString());
}
或者使用parseJSON()
js代码
function myEval() {
var str = '{ "name": "Violet", "occupation": "character" }';
var obj = str.parseJSON();
alert(obj.toJSONString());
}
下面使用prototype来写一个JSON ajax的例子。
先写一个servlet(我的是servlet.ajax.JSONTest1.java),只写一句话
java代码
response.getWriter().print("{ "name": "Violet", "occupation": "character" }");
然后在页面上写一个ajax请求
js代码
function sendRequest() {
var url = "/MyWebApp/JSONTest1";
var mailAjax = new Ajax.Request(
url, {
method: 'get',
onComplete: jsonResponse
});
}
function jsonResponse(originalRequest) {
alert(originalRequest.responseText);
var myobj = originalRequest.responseText.parseJSON();
alert(myobj.name);
}
在prototype-1.5.1.js中提供了JSON方法,String.evalJSON(),你可以在不使用json.js的情况下更改里面的方法
js代码
function jsonResponse(originalRequest) {
alert(originalRequest.responseText);
var myobj = originalRequest.responseText.evalJSON(true);
alert(myobj.name);
}
JSON还提供了java jar包API也很简单javascript json解析javascript json解析,下面是一个反例
在javascript中添加请求参数
js代码
function sendRequest() {
var carr = new Car("Dodge", "Coronet R/T", 1968, "yellow");
var pars = "car=" + carr.toJSONString();
var url = "/MyWebApp/JSONTest1";
var mailAjax = new Ajax.Request(
url, {
method: 'get',
parameters: pars,
onComplete: jsonResponse
});
}
使用JSON请求字符串可以简单地生成JSONObject并解析它,更改servlet添加JSON处理(使用json.jar)
java代码
private void doService(HttpServletRequest request, HttpServletResponse response) throws IOException {
String s3 = request.getParameter("car");
try {
JSONObject jsonObj = new JSONObject(s3);
System.out.println(jsonObj.getString("model"));
System.out.println(jsonObj.getInt("year"));
} catch (JSONException e) {
e.printStackTrace();
}
response.getWriter().print("{ "name": "Violet", "occupation": "character" }");
}
还可以使用 JSONObject 生成 JSON 字符串,更改 servlet
java代码
private void doService(HttpServletRequest request, HttpServletResponse response) throws IOException {
String s3 = request.getParameter("car");
try {
JSONObject jsonObj = new JSONObject(s3);
System.out.println(jsonObj.getString("model"));
System.out.println(jsonObj.getInt("year"));
} catch (JSONException e) {
e.printStackTrace();
}
JSONObject resultJSON = new JSONObject();
try {
resultJSON.append("name", "Violet")
.append("occupation", "developer")
.append("age", new Integer(22));
System.out.println(resultJSON.toString());
} catch (JSONException e) {
e.printStackTrace();
}
response.getWriter().print(resultJSON.toString());
}
js代码
function jsonResponse(originalRequest) {
alert(originalRequest.responseText);
var myobj = originalRequest.responseText.evalJSON(true);
alert(myobj.name);
alert(myobj.age);
}
接下来重点讲一下JS中对json数据的处理:
1. JSON数据结构(对象和字段)
json对象:varobj={"name":"xiao","age":12};
json链表:
var objArray = [{"name":"xiao","age":12},{"name":"xiao","age":12}];
2、处理json数据,依赖文件包括:jQuery.js
3、注意:数据传输时,json数据以文本形式存在,即字符串格式;
JS语言操作JS对象;
所以json字符串和JS对象之间的转换是关键;
4. 数据格式
Json字符串:varjson_str='{"name":"xiao","age":12}';
Josn对象:varobj={"name":"xiao","age":12};
JS对象:Object{name:"xiao",age:12}
5. 类型转换
Json字符串-->JS对象,用法:
注明:json_str和obj代表本文小标题4中的数据类型;
obj=JSON. 解析(json_str);
obj=jQuery. parseJSON(json_str);
注意:如果传入格式错误的json字符串(例如:'{name:"xiao",age:12}'),将会抛出异常;
Json字符串格式,严格格式:'{"name":"xiao","age":12}'
JS 对象 --> Json 字符串:
json_str=JSON. 字符串化(对象);
笔记:
1. eval() 是原生 JS 函数。 使用这种方法: eval('('+'{name:"xiao",age:12}'+')') 不安全,不能保证类型转换为 JS 对象;
2、以上3种技术均通过chrome浏览器进行了测试,测试结果截图如下;
Json字符串--> JS对象;
JS 对象 --> Json 字符串: