JSON 天生是为 JavaScript 准备的,因此,JSON 的数据格式非常简单,您可以用 JSON 传输一个简单的 String,Number,Boolean,也可以传输一个数组,或者一个复杂的 Object 对象。
json数据形式:{"city":"Beijing","street":"ChaoyangRoad","postcode":100025}
对象:使用{}表示一个对象;
用“”表示一个字符串;
数组:使用 [] 包含所有元素,每个元素用逗号分隔,元素可以是任意的 Value
如何在服务器端生成 JSON 格式的数据以便发送到客户端,以及客户端如何使用 JavaScript 处理 JSON 格式的数据。
服务器端:
把一个对象转换为json形式:JSONObject.fromObject(user).toString()
把一个集合转换成json形式:JSONArray jsonArray = JSONArray.fromObject(userList);
读取json文件: String sets=ReadFile(path);//获得json文件的内容
JSONObject jo=JSONObject.fromObject(sets);//格式化成json对象
编制json形式数据:字符串/数字/布尔型用 .toString
数组:
(array.length==0)
return "[]";
StringBuilder sb = new StringBuilder(array.length << 4);
sb.append('[');
for (Object o : array) {
sb.append(toJson(o));
sb.append(',');
}
// 将最后添加的 ',' 变为 ']':
sb.setCharAt(sb.length()-1, ']');
return sb.toString();
Map<String,Object>: JavaScript 的 Object 实际上对应的是 Java 的 Map<String, Object>
if (map.isEmpty())
return "{}";
StringBuilder sb = new StringBuilder(map.size() << 4);
sb.append('{');
Set<String> keys = map.keySet();
for (String key : keys) {
Object value = map.get(key);
sb.append('/"');
sb.append(key);
sb.append('/"');
sb.append(':');
sb.append(toJson(value));
sb.append(',');
}
// 将最后的 ',' 变为 '}':
sb.setCharAt(sb.length()-1, '}');
客户端:解析json数据
在javascript中是用var dom = eval('('+jsondata+')')来解析,用dom.keyname来获得值。
用dom.toJSONString来获得json对象的内容。
jquery解析json:
- $.getJSON('jsonData.json?id',function(data){
- //遍历JSON中的每个entry
- $.each(data,function(entryIndex,entry){
- var html='<tr>';
- html+='<td>'+entry['name']+'</td>';
- html+='<td>'+entry['sex']+'</td>';
- html+='<td>'+entry['home']+'</td>';
- html+='</tr>';
- $('#title').after(html);
- });
- });
说明: each在每次执行函数时,都会给函数传递一个表示作为执行环境的元素在匹配的元素集合中所处位置的数字值作为参数。这里所指的则为commentIndex, 而每一个entryIndex所对应的值则为entry, entry则为其中一个json对象
另:访问json:一种是可以用entry.name的方式来访问,另一种则是entry["name"]的方式;
若是数组则用:entry.names[0]来访问
jsp的contentType设为application/json形式:
JSON文本的MIME类型是application/json
使用标签在JSP中写JSON数据:
<%@ taglib prefix="json" uri="http://www.atg.com/taglibs/json" %>
<json:object>
<json:property name="itemCount" value="${cart.itemCount}"/>
<json:property name="subtotal" value="${cart.subtotal}"/>
<json:array name="items" var="item" items="${cart.lineItems}">
<json:object>
<json:property name="title" value="${item.title}"/>
<json:property name="description" value="${item.description}"/>
<json:property name="imageUrl" value="${item.imageUrl"/>
<json:property name="price" value="${item.price}"/>
<json:property name="qty" value="${item.qty}"/>
</json:object>
</json:array>
</json:object>
JOSN输出结果:
{
itemCount: 2,
subtotal: "$15.50",
items:[
{
title: "The Big Book of Foo",
description: "Bestselling book of Foo by A.N. Other",
imageUrl: "/images/books/12345.gif",
price: "$10.00",
qty: 1
},
{
title: "Javascript Pocket Reference",
description: "Handy pocket-sized reference for the Javascript language",
imageUrl: "/images/books/56789.gif",
price: "$5.50",
qty: 1
}
]
}