`
uule
  • 浏览: 6352742 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

JSON基础知识总结

    博客分类:
  • JSON
阅读更多
JSON对象是一个无序的"名称/值"对的集合它开始于“{”,结束于“}”。每一个属性名和值间用“:”提示,属性间用“,”分隔。一个数组开始于"[",结束于"]",值之间用","分隔。
数组和List转换为JSON用JSONArray.fromObject 
Map、bean、beans(保存在一个List中转换)转换为JSON用 JSONObject.fromObjectJSONObject.toBean(JSONObject类型,Class类型)  // 转换为对象(如自定义类对象,Map对象等)

 

strJson = "{\"orderList\":[";
      	if(nCount > 0){
      		for(CDO route : cdosRoute){
          		strJson += route.toJSON()+",";
          	}
      		strJson = strJson.substring(0, strJson.length()-1);
      	}
      	strJson += "]}";

 List集合对象转换成json对象

 

第一、在pom.xml文件中增加jar包依赖:

<dependency>

<groupId>net.sf.json-lib</groupId>

<artifactId>json-lib</artifactId>

<version>0.9</version>

</dependency>

第二、在Java中用下面方法获取到json对象:

JSONArray  json  =  JSONArray.fromObject(latestFourDaysUserGas); 

第三、使用toString()方法得到字符串:

String  result  =  json.toString();

 

 

JSON优缺点:

优点:

1、JSON 由于比 XML 更小更轻量所以在 Web 应用种更加流行。

比DOM技术更为便捷的数据访问途径

访问JSON中的名称: addressbook.name 

访问JSON中的地址: addressbook.address.street 

访问JSON中的电话号码第一位:addressbook.address.phoneNumbers[0] 

 

2、在XML中,打开和关闭标记是必需的,这样才能满足标记的依从性;而在JSON中,所有这些要求只需通过一个简单的括号即可满足。在包含有数以百计字段的数据交换中,传统的XML标记将会延长数据交换时间。

 

缺点:

 

命名空间允许不同上下文中的相同的信息段彼此混合,然而,显然在JSON中已经找不到了命名空间

  

 

一、JSON (JavaScript Object Notation)是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互.
JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。

Json必需的包(重新导入包后需重启下,因为这个问题浪费了我好长时间 ,需注意)
commons-beanutils.jar
commons-lang-2.4.jar
commons-logging-1.1.1.jar
json-lib-2.2.3-jdk13.jar
ezmorph-1.0.6.jar
commons-collections-3.2.1.jar

JSON的格式

JSON的格式是由大括号和由冒号(:)构成的名值对所组成的。注意JSON格式与对象字面量 (object literals) 的区别:JSON的名字部分严格用引号+名字来表示。

举例说明

  • 对象的字面量
var objectLiteral = {
name: "Objector.L",
age: "24",
special: "JavaScript",
sayName: function() {
return this.name;
}
}
;
  • JSON对象
var jsonFormat = {
"summary": "Blogs",
"blogrolls": [
{
"title": "Explore JavaScript",
"link": "http://example.com/"
},
{
"title": "Explore JavaScript",
"link": "http://example.com/"
}
]
}
;

eval和JSON

由于Ajax的兴起,JSON这种轻量级的数据格式作为客户端与服务器之间的传输格式逐渐地流行起来,进而出现的问题是如何将服务器端构建好的JSON数据转化为可用的JavaScript对象。利用eval函数无疑是一种简单而直接的方法。在转化的时候需要将JSON字符串的外面包装一层圆括号:

var jsonObject = eval("(" + jsonFormat + ")");

为什么要加括号?

加上圆括号的目的是迫使eval函数在评估JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:

alert(eval("{}");  // return undefined
alert
(eval("({})");// return object[Object]

JSON格式的名字部分为什么要加引号?

因为eval函数会将{foo:”bar”}解释成合法的JavaScript语句,而非表达式。但是人们往往想要的是让eval将这段代码解释成一个对象。所以JSON格式会强制你去在名字的外侧加上引号再结合圆括号,这样eval就不会错误的将JSON解释成代码块。

举例说明

  • eval错误解析语义
alert(eval('{foo:"bar"}'));      // return "bar", incorrect
  • eval正确解析JSON
alert(eval('({"foo": "bar"})')); // return JSON object, correct

结论

理解eval的工作原理和json的严格的限定格式,合理结合eval和json应用于JavaScript的数据传递和对象转换。

following this format:

eval('{' + jsonString + ')');// code removed by author at 2010-01-03
eval('(' + jsonString + ')');

<script language="javascript">

 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); 
//或       user.info["cellphone"]  
     alert(user.address[0].city);   
     alert(user.address[0].postcode);   
 } 
</script>

 这表示一个user对象,拥有username, age, info, address 等属性。
同样也可以用JSON来简单的修改数据,修改上面的例子
js 代码

 function showJSON() {   
     var user =    
     {    
         "username":"andy",   
         "age":20,   
         "info": { "tel": "123456", "cellphone": "98765"},   
         "address":   
             [   
                 {"city":"beijing","postcode":"222333"},   
                 {"city":"newyork","postcode":"555666"}   
             ]   
     }           
     user.username = "Tom";   
     alert(user.username);   
 } 

易错地方 (注意有无外引号):

    function testJson(){
    	 
    	 var str = { "name": "Violet", "password": "character" };   //JSON类型对象
//无引号,是JSON对象
    	 alert(typeof(str));  //JSON类型
         alert(str.password); 

         //alert(obj.toJSONString());  
         
          var a=50,b="xxx";
          var arr="{id:"+a+",name:'"+b+"'}"; //string类型
              //字符串拼接为可转换为JSON的String 
  
          var str2 = '{ "name": "Violet", "password": "character" }';     
//有引号,是String类型对象        
          alert(typeof(str2)); //string类型
          var obj = eval('(' + str2 + ')');  //转换为JSON类型
          alert(typeof(obj)); //JSON类型
          alert(obj.name);  //Violet
    }
    </script>

 

		   JSONObject resultJSON = new JSONObject(); 
		   resultJSON.put("param1", 1);
		   resultJSON.put("param2", 2);
		   resultJSON.put("param3", 3);
		   System.out.println(resultJSON);  
		   //{"param1":1,"param2":2,"param3":3}

 

var t="{'firstName': 'cyra', 'lastName': 'richardson'}";  
    var jsonobj=eval('('+t+')');  
    alert(jsonobj.firstName);  
    alert(jsonobj.lastName);  
  
  
var t2="[{name:'zhangsan',age:'24'},{name:'lisi',age:'30'},{name:'wangwu',age:'16'},{name:'tianqi',age:'7'}] ";  
var myobj=eval(t2);  
//通过eval() 函数可以将JSON字符串转化为对象 
for(var i=0;i<myobj.length;i++){  
   alert(myobj[i].name);  
   alert(myobj[i].age);  
}  

 

 

 

二、Java代码转换成json代码

1.List集合转换成json代码+
List list = new ArrayList();
list.add( "first" );
list.add( "second" );
JSONArray jsonArray2 = JSONArray.fromObject( list );

2.Map集合转换成json代码
Map map = new HashMap();
map.put("name", "json");
map.put("bool", Boolean.TRUE);
map.put("int", new Integer(1));
map.put("arr", new String[] { "a", "b" });
map.put("func", "function(i){ return this.arr[i]; }");
JSONObject json = JSONObject.fromObject(map);
//{"func":function(i){ return this.arr[i]; },"arr":["a","b"],"int":1,"name":"json","bool":true}  


3.Bean转换成json代码
JSONObject jsonObject = JSONObject.fromObject(new JsonBean());

 

//当是对象的时候
Student student = new Student();
student.setAge(18);
student.setName("zhangsan");
student.setSex("male");
JSONObject jsonObject = JSONObject.fromObject(student);
System.out.println(jsonObject);//输出{"age":18,"name":"zhangsan","sex":"male"}


4.数组转换成json代码
boolean[] boolArray = new boolean[] { true, false, true };
JSONArray jsonArray1 = JSONArray.fromObject(boolArray);

5.beans转换成json代码
  List  userInfosList = new ArrayList<UserInfo>();
   UserInfo u1 = new UserInfo();
   u1.setUserId(10000); 
   u1.setUserName("qqqqq");
   u1.setPassword("111111");
   UserInfo u2 = new UserInfo();
   u2.setUserId(10001); 
   u2.setUserName("wwwww"); 
   u2.setPassword("222222");
   userInfosList.add(u1);
   userInfosList.add(u2);
   JSONArray json2=JSONArray.fromObject(userInfosList);

 

     Iterator it=json2.listIterator();
        while(it.hasNext())          
        {

            JSONObject obj=(JSONObject)it.next();
            UserInfo u=(UserInfo)JSONObject.toBean(obj,UserInfo.class);
            System.out.println(u.getPassword());
        }

 

6、String转JSON

String listStr = "['apple','orange']";		
		//JSONArray json = JSONArray.fromObject(listStr);
				//结果:["apple","orange"]
		//必须用JSONArray来转,用JSONObject会出现以下错误信息:
			// A JSONObject text must begin with '{' at character 1 of ['apple','orange']
		
		String mapStr2 = "{'apple','orange'}";
		JSONObject json = JSONObject.fromObject(mapStr2);
		//用JSONObject必须是键值对,上面会出现以下错误:
			//Expected a ':' after a key at character 9 of {'apple','orange'}		
		
		String mapStr1 = "{'age':30,'name':'Michael','baby':['Lucy','Lily']}";		
		JSONObject json2 = JSONObject.fromObject(mapStr1);
				//{"age":30,"name":"Michael","baby":["Lucy","Lily"]}		
		
		System.out.println(json);

 

三、JSON转List、Map

 

转List:   JSONArray.toCollection(json)

//JSON转List
		String str = "['apple','orange']";
		JSONArray json = JSONArray.fromObject(str);
		Collection<String> list = JSONArray.toCollection(json);
		for (String s : list) {
			   System.out.println(s);
		}

 

转Map:JSONObject.toBean(json , Map.class)

//JOSN转Map
		String mapStr = "{'age':30,'name':'Michael','baby':['Lucy','Lily']}";
		JSONObject json3 = JSONObject.fromObject(mapStr);
		Map<String, Object> map = (Map) JSONObject.toBean(json3, Map.class);
		for (Map.Entry<String, Object> entry : map.entrySet()) {
		    System.out.println(entry.getKey() + " " + entry.getValue());
		}
		//name Michael
		//age 30
		//baby [Lucy, Lily]

 注意其Str转JSON问题!

 

四、遍历JSON数据的两种常用方式

 var json={"status":1,"info":"u83b7u53d6u6210u529f","data":[{"id":"4","name":"u77f3u5bb6u5e84","information":"u5e02","Region_id":"3","type":"1"}]}
 var data=json.data;
 for(i=0;i<data.length;i++)
 {
     document.write("Name:"+data[i].name+",Info:"+data[i].information+"");
 }

 

var json=[{"kl_id":"2","kl_title":"Test date1","kl_content":"Test date2","kl_type":"3","id":"6"},{"kl_id":"2","kl_title":"Test1","kl_content":"Test2","kl_type":"1","id":"9"}]
    var str = "";
    for (var one in json)
     {
        for(var key in json[one])
         {
             str += json[one][key] + ",";
         }
     }
     document.write(str);

 

List list = query.list();
List<String> excList = new ArrayList<String>();
		if(list!=null && list.size()>0){
			for (int i = 0; i < list.size(); i++) {
				Object[] obj = (Object[]) list.get(i);
				EipAnalysisServiceExc excR=new EipAnalysisServiceExc();
				excR.setId(Long.parseLong(obj[0].toString()));
				excR.setServiceName(obj[1]!=null?obj[1].toString():null);
				
				excList.add(JSONObject.fromObject(excR).toString());
			}
		}


for (int i = 0; i < excList.size(); i++) {
	JSONObject jSONObject = JSONObject.fromObject(excList.get(i));
	EipAnalysisServiceExc exc = JSONObject.toBean(jSONObject, EipAnalysisServiceExc.class);
		}


/*由JSONObject.fromObject(excR)得到JSONObject对象,然后toString传输,再JSONObject.fromObject解析为JSONObject对象
使用JSONObject.toBean(JSONObject类型,Class类型)  // 转换为对象(如自定义类对象,Map对象等) 转换为类类型
*/

 ..

 

 

分享到:
评论

相关推荐

    json 学习笔记 相关知识点

    ### JSON学习笔记:深入理解与应用 #### 一、JSON简介与重要性 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于ECMAScript的一个子集,采用...

    json知识总结

    JSON(JavaScript Object Notation,JS对象表示法)是一种轻量级的数据交换格式,具有易于阅读和编写、易于机器解析和生成的特点。它的设计目标是易于人阅读和编写,同时也易于机器解析和生成。尽管JSON是基于...

    json知识点说明.zip

    JSON(JavaScript Object Notation)是一种轻量级的数据...总结,JSON作为一种高效、简洁的数据交换格式,已经深入到现代Web开发的各个方面。理解并掌握JSON的使用,对于任何涉及网络数据交换的项目都是至关重要的。

    JSON相关知识汇总

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON基于JavaScript语言的一个子集,但...掌握这些知识点对理解和操作JSON数据格式是基础且必不可少的。

    JSON基础归纳整理

    在了解了JSON的基础知识之后,开发者可以进一步学习如何使用各种编程语言提供的库来处理JSON数据。例如,Google提供的Gson库是一个非常流行的Java库,用于将Java对象转换成JSON格式以及将JSON字符串转换成相应的Java...

    JSON的学习总结(总结+源码)

    理解这些知识点对于开发Web应用至关重要,无论你是服务器端开发者还是前端开发者。正确地处理和解析JSON数据能有效提升应用的效率和安全性。在实际项目中,要根据需求选择合适的解析方法,同时注意避免潜在的安全...

    java json api,json api

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于Web服务和应用程序之间的数据传输,因为它易于阅读和编写,...在理解并熟练掌握这些知识点后,开发者能够更好地应对JSON数据处理的各种场景。

    JSON解析 创建JSON

    总结,JSON作为一种轻量级的数据格式,其创建和解析是Web开发中的基础技能。理解JSON的基本结构,学会在不同语言中创建和解析JSON,以及了解相关扩展如JSON Schema、JSONP和JSON-LD,都将对提升你的Web开发能力...

    java服务端生成json(json服务端)

    总结来说,Java服务端生成JSON涉及的主要知识点包括: 1. JSON数据格式的理解及其在数据交换中的作用。 2. 使用Gson或FastJson库进行JSON序列化和反序列化。 3. 结合HTTP服务器框架处理JSON响应。 4. 调试和测试JSON...

    Jackson将json string转为Object,org.json读取json数组的实例

    总结以上知识点,可以知道在Java中处理JSON数据时,Jackson库和org.json库是非常有用的工具。使用ObjectMapper可以轻松地将JSON数据转换为Java对象,而org.json库的JSONArray和JSONObject类则提供了处理JSON数组和...

    解析JSON总结示例源码

    通过学习和理解这些知识点,你可以更好地理解和操作JSON数据,无论是解析JSON字符串,还是构建符合规范的JSON对象,都能游刃有余。对于开发人员来说,掌握JSON的使用是现代Web开发的基础技能之一。

    json处理总结.zip

    下面是对JSON处理进行详细总结的关键知识点: 1. **JSON的基本结构和数据类型** JSON数据由键值对组成,键用引号包围,值可以是字符串、数字、布尔值、数组、对象或null。例如: ```json { "name": "John", ...

    JSON2解决JSON未定义

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它采用完全独立于语言的文本格式,但也使用了类似于C...这个知识点对于编写兼容性良好的Web应用至关重要,尤其是在需要与服务器交换JSON数据的场景下。

    ArduinoJson-5.x_arduinojson.h下载_ArduinoJson5_arduino库_

    在本文中,我们将深入探讨 ArduinoJson-5.x 库的关键知识点,以及如何在 Arduino 项目中使用它。 **1. JSON 数据格式** JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,广泛应用于网络通信和存储...

    JSON--List集合转换成JSON对象详解

    以上知识点,不仅包括了将List集合转换为JSON对象的基本方法,还涉及到了在实际开发中可能遇到的问题及其解决方法,包括对特定框架和库的使用,对敏感数据的过滤等。掌握了这些知识点,对于进行Web开发和数据交换的...

    Json处理工具类

    ### Json处理工具类知识点 #### 一、简介 在Java编程中,经常需要对JSON数据进行解析、构建或转换等操作。为此,本知识点将基于提供的文件内容介绍一个实用的`JsonHandle`类,该类封装了多个用于处理JSON字符串的...

    WPF 导入JSON数据

    在Windows Presentation Foundation(WPF)应用...以上就是关于WPF导入JSON数据到数据库的主要步骤和相关知识点。确保在实际操作中遵循最佳实践,例如处理异常、关闭数据库连接以及使用参数化查询以防止SQL注入攻击。

    json例子集合里面有很多自己总结的JSON例子

    以下是一些关于JSON的知识点: 1. **JSON的基本结构**: JSON数据主要由键值对组成,类似于JavaScript的对象字面量表示法。一个JSON对象以大括号`{}`包围,键值对以冒号`:`分隔,键与值之间用逗号`,`分隔。例如: ...

    Json页面总结

    综上所述,这些知识点涵盖了 JSON 与 JavaScript 对象之间的基本操作,包括序列化、反序列化、自定义类与 JSON 的交互以及对 JSON 对象的基本操作。这些技术对于任何从事 Web 开发的人来说都是非常重要的基础知识。

Global site tag (gtag.js) - Google Analytics