json用法.docx
- 文档编号:25719179
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:14
- 大小:18.43KB
json用法.docx
《json用法.docx》由会员分享,可在线阅读,更多相关《json用法.docx(14页珍藏版)》请在冰豆网上搜索。
json用法
JSON语法是JavaScript语法的子集。
JSON语法规则
JSON语法是JavaScript对象表示法语法的子集。
∙数据在名称/值对中
∙数据由逗号分隔
∙花括号保存对象
∙方括号保存数组
JSON名称/值对
JSON数据的书写格式是:
名称/值对。
名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:
"firstName":
"John"
这很容易理解,等价于这条JavaScript语句:
firstName="John"
JSON值
JSON值可以是:
∙数字(整数或浮点数)
∙字符串(在双引号中)
∙逻辑值(true或false)
∙数组(在方括号中)
∙对象(在花括号中)
∙null
JSON对象
JSON对象在花括号中书写:
对象可以包含多个名称/值对:
{"firstName":
"John","lastName":
"Doe"}
这一点也容易理解,与这条JavaScript语句等价:
firstName="John"
lastName="Doe"
JSON数组
JSON数组在方括号中书写:
数组可包含多个对象:
{
"employees":
[
{"firstName":
"John","lastName":
"Doe"},
{"firstName":
"Anna","lastName":
"Smith"},
{"firstName":
"Peter","lastName":
"Jones"}
]
}
在上面的例子中,对象"employees"是包含三个对象的数组。
每个对象代表一条关于某人(有姓和名)的记录。
JSON使用JavaScript语法
因为JSON使用JavaScript语法,所以无需额外的软件就能处理JavaScript中的JSON。
通过JavaScript,您可以创建一个对象数组,并像这样进行赋值:
例子
varemployees=[
{"firstName":
"Bill","lastName":
"Gates"},
{"firstName":
"George","lastName":
"Bush"},
{"firstName":
"Thomas","lastName":
"Carter"}
];
可以像这样访问JavaScript对象数组中的第一项:
employees[0].lastName;
返回的内容是:
Gates
可以像这样修改数据:
employees[0].lastName="Jobs";
JSON实例-来自字符串的对象
创建包含JSON语法的JavaScript字符串:
vartxt='{"employees":
['+
'{"firstName":
"Bill","lastName":
"Gates"},'+
'{"firstName":
"George","lastName":
"Bush"},'+
'{"firstName":
"Thomas","lastName":
"Carter"}]}';
由于JSON语法是JavaScript语法的子集,JavaScript函数eval()可用于将JSON文本转换为JavaScript对象。
eval()函数使用的是JavaScript编译器,可解析JSON文本,然后生成JavaScript对象。
必须把文本包围在括号中,这样才能避免语法错误:
varobj=eval("("+txt+")");
在网页中使用JavaScript对象:
例子
通过JSON字符串来创建对象
FirstName:
LastName:
vartxt='{"employees":
['+
'{"firstName":
"Bill","lastName":
"Gates"},'+
'{"firstName":
"George","lastName":
"Bush"},'+
'{"firstName":
"Thomas","lastName":
"Carter"}]}';
varobj=eval("("+txt+")");
document.getElementById("fname").innerHTML=obj.employees[1].firstName
document.getElementById("lname").innerHTML=obj.employees[1].lastName
JSON解析器
提示:
eval()函数可编译并执行任何JavaScript代码。
这隐藏了一个潜在的安全问题。
使用JSON解析器将JSON转换为JavaScript对象是更安全的做法。
JSON解析器只能识别JSON文本,而不会编译脚本。
在浏览器中,这提供了原生的JSON支持,而且JSON解析器的速度更快。
较新的浏览器和最新的ECMAScript(JavaScript)标准中均包含了原生的对JSON的支持。
Web浏览器支持
Web软件支持
∙Firefox(Mozilla)3.5
∙InternetExplorer8
∙Chrome
∙Opera10
∙Safari4
∙jQuery
∙YahooUI
∙Prototype
∙Dojo
∙ECMAScript1.5
例子
通过JSON字符串来创建对象
FirstName:
LastName:
vartxt='{"employees":
['+
'{"firstName":
"Bill","lastName":
"Gates"},'+
'{"firstName":
"George","lastName":
"Bush"},'+
'{"firstName":
"Thomas","lastName":
"Carter"}]}';
obj=JSON.parse(txt);
document.getElementById("fname").innerHTML=obj.employees[1].firstName
document.getElementById("lname").innerHTML=obj.employees[1].lastName
packagecom.mai.json;
importstaticorg.junit.Assert.assertEquals;
importjava.util.ArrayList;
importjava.util.Date;
importjava.util.HashMap;
importjava.util.Iterator;
importjava.util.List;
importjava.util.Map;
importnet.sf.ezmorph.Morpher;
importnet.sf.ezmorph.MorpherRegistry;
importnet.sf.ezmorph.bean.BeanMorpher;
importnet.sf.json.JSONArray;
importnet.sf.json.JSONObject;
importnet.sf.json.util.JSONUtils;
importmons.beanutils.PropertyUtils;
importorg.junit.Test;
publicclassJsonLibTest{
/*
*普通类型、List、Collection等都是用JSONArray解析
*
*Map、自定义类型是用JSONObject解析
*可以将Map理解成一个对象,里面的key/value对可以理解成对象的属性/属性值
*即{key1:
value1,key2,value2......}
*
*1.JSONObject是一个name:
values集合,通过它的get(key)方法取得的是key后对应的value部分(字符串)
*通过它的getJSONObject(key)可以取到一个JSONObject,-->转换成map,
*通过它的getJSONArray(key)可以取到一个JSONArray,
*
*
*/
//一般数组转换成JSON
@Test
publicvoidtestArrayToJSON(){
boolean[]boolArray=newboolean[]{true,false,true};
JSONArrayjsonArray=JSONArray.fromObject(boolArray);
System.out.println(jsonArray);
//prints[true,false,true]
}
//Collection对象转换成JSON
@Test
publicvoidtestListToJSON(){
Listlist=newArrayList();
list.add("first");
list.add("second");
JSONArrayjsonArray=JSONArray.fromObject(list);
System.out.println(jsonArray);
//prints["first","second"]
}
//字符串json转换成json,根据情况是用JSONArray或JSONObject
@Test
publicvoidtestJsonStrToJSON(){
JSONArrayjsonArray=JSONArray.fromObject("['json','is','easy']");
System.out.println(jsonArray);
//prints["json","is","easy"]
}
//Map转换成json,是用jsonObject
@Test
publicvoidtestMapToJSON(){
Mapmap=newHashMap();
map.put("name","json");
map.put("bool",Boolean.TRUE);
map.put("int",newInteger
(1));
map.put("arr",newString[]{"a","b"});
map.put("func","function(i){returnthis.arr[i];}");
JSONObjectjsonObject=JSONObject.fromObject(map);
System.out.println(jsonObject);
}
//复合类型bean转成成json
@Test
publicvoidtestBeadToJSON(){
MyBeanbean=newMyBean();
bean.setId("001");
bean.setName("银行卡");
bean.setDate(newDate());
ListcardNum=newArrayList();
cardNum.add("农行");
cardNum.add("工行");
cardNum.add("建行");
cardNum.add(newPerson("test"));
bean.setCardNum(cardNum);
JSONObjectjsonObject=JSONObject.fromObject(bean);
System.out.println(jsonObject);
}
//普通类型的json转换成对象
@Test
publicvoidtestJSONToObject()throwsException{
Stringjson="{name=\"json\",bool:
true,int:
1,double:
2.2,func:
function(a){returna;},array:
[1,2]}";
JSONObjectjsonObject=JSONObject.fromObject(json);
System.out.println(jsonObject);
Objectbean=JSONObject.toBean(jsonObject);
assertEquals(jsonObject.get("name"),PropertyUtils.getProperty(bean,"name"));
assertEquals(jsonObject.get("bool"),PropertyUtils.getProperty(bean,"bool"));
assertEquals(jsonObject.get("int"),PropertyUtils.getProperty(bean,"int"));
assertEquals(jsonObject.get("double"),PropertyUtils.getProperty(bean,"double"));
assertEquals(jsonObject.get("func"),PropertyUtils.getProperty(bean,"func"));
System.out.println(PropertyUtils.getProperty(bean,"name"));
System.out.println(PropertyUtils.getProperty(bean,"bool"));
System.out.println(PropertyUtils.getProperty(bean,"int"));
System.out.println(PropertyUtils.getProperty(bean,"double"));
System.out.println(PropertyUtils.getProperty(bean,"func"));
System.out.println(PropertyUtils.getProperty(bean,"array"));
ListarrayList=(List)JSONArray.toCollection(jsonObject.getJSONArray("array"));
for(Objectobject:
arrayList){
System.out.println(object);
}
}
//将json解析成复合类型对象,包含List
@Test
publicvoidtestJSONToBeanHavaList(){
Stringjson="{list:
[{name:
'test1'},{name:
'test2'}],map:
{test1:
{name:
'test1'},test2:
{name:
'test2'}}}";
//Stringjson="{list:
[{name:
'test1'},{name:
'test2'}]}";
MapclassMap=newHashMap();
classMap.put("list",Person.class);
MyBeanWithPersondiyBean=(MyBeanWithPerson)JSONObject.toBean(JSONObject.fromObject(json),MyBeanWithPerson.class,classMap);
System.out.println(diyBean);
Listlist=diyBean.getList();
for(Objecto:
list){
if(oinstanceofPerson){
Personp=(Person)o;
System.out.println(p.getName());
}
}
}
//将json解析成复合类型对象,包含Map
@Test
publicvoidtestJSONToBeanHavaMap(){
//把Map看成一个对象
Stringjson="{list:
[{name:
'test1'},{name:
'test2'}],map:
{testOne:
{name:
'test1'},testTwo:
{name:
'test2'}}}";
MapclassMap=newHashMap();
classMap.put("list",Person.class);
classMap.put("map",Map.class);
//使用暗示,直接将json解析为指定自定义对象,其中List完全解析,Map没有完全解析
MyBeanWithPersondiyBean=(MyBeanWithPerson)JSONObject.toBean(JSONObject.fromObject(json),MyBeanWithPerson.class,classMap);
System.out.println(diyBean);
System.out.println("dothelistrelease");
List
for(Persono:
list){
Personp=(Person)o;
System.out.println(p.getName());
}
System.out.println("dothemaprelease");
//先往注册器中注册变换器,需要用到ezmorph包中的类
MorpherRegistrymorpherRegistry=JSONUtils.getMorpherRegistry();
MorpherdynaMorpher=newBeanMorpher(Person.class,morpherRegistry);
morpherRegistry.registerMorpher(dynaMorpher);
Mapmap=diyBean.getMap();
/*这里的map没进行类型暗示,故按默认的,里面存的为net.sf.ezmorph.bean.MorphDynaBean类型的对象*/
System.out.println(map);
/*输出:
{testOne=net.sf.ezmorph.bean.MorphDynaBean@f73c1[
{name=test1}
],testTwo=net.sf.ezmorph.bean.MorphDynaBean@186c6b2[
{name=test2}
]}
*/
List
for(Iteratori=map.values().iterator();i.hasNext();){
//使用注册器对指定DynaBean进行对象变换
output.add((Person)morpherRegistry.morph(Person.class,i.next()));
}
for(Personp:
output){
System.out.println(p.getName());
/*输出:
test1
test2
*/
}
}
}
5.下面提供上面例子所需的资源,包括jar包和代码
/Files/mailingfeng/json-lib/json-lib用例所需jar包和java类.rar
(注:
文档可能无法思考全面,请浏览后下载,供参考。
可复制、编制,期待你的好评与关注)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- json 用法