json教程_json教程.pdf - CSDN
  • json教程从入门到使用

    万次阅读 多人点赞 2013-11-24 10:21:26
    json教程从入门到使用 一:入门 简介: JSON(JavaScriptObject Notation)、轻量级数据交换格式、非常适合于服务器与 JavaScript 的交互。 JSON两种格式: 1、对象 对象是一个无序的“‘名称/值’对”集合。一个...

    json教程从入门到使用

    一:入门

    简介:

    JSON(JavaScriptObject Notation)、轻量级数据交换格式、非常适合于服务器与 JavaScript 的交互。

    JSON两种格式:

    1、对象

    对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

    2、数组

    数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

    (具体格式可参照www.json.org、这里只做简略介绍、下方会贴出具体相关)

    javascript中的JSON相关:

    一:对象型JSON

          

    二:数组型JSON

    $(document).ready(function showStudent(){
                  varstudent =
                  [
                         {"sno":"001","name":"jack","age":130},
                         {"sno":"002","name":"tame","age":120},
                         {"sno":"003","name":"cule","age":110},
                  ];
                  //以下是两种获取值的方法
                  document.write('sno:' + student[0].sno + '    name:' +student[0].name +'    age :' +student[0].age +'<br/>');
                  document.write('sno:' + student[0]["sno"] + '   name:' + student[0]["name"] +'    age :' + student[0]["age"]+'<br/>' );
     
                  document.write('sno:' + student[1]["sno"] + '   name:' + student[1]["name"] +'    age :' + student[1]["age"]+'<br/>' );
                  document.write('sno:' + student[1]["sno"] + '   name:' + student[1]["name"] +'    age :' + student[1]["age"]+'<br/>' );
     
                  document.write('sno:' + student[2]["sno"] + '   name:' + student[2]["name"] +'    age :' + student[2]["age"]+'<br/>' );
                  document.write('sno:' + student[2]["sno"] + '   name:' + student[2]["name"] +'    age :' + student[2]["age"]+'<br/>' );
           });


    三:相互嵌套(仅举一种、可自己弄着玩试试)

    $(document).ready(function showStudent(){
                  varstudent =
                  {
                        
                         "sno":"001",
                         "name":"jack",
                         "age":130,
                         "address":
                         [
                                {"pro":"anhui","city":"fuyang"},
                                {"pro":"jiangsu","city":"nanjing"}
                         ]
                 
                  }
                  document.write('sno:' + student.sno    + '    name:' + student.name    +'   age :' + student.age    +'    pro :' + student.address[0].pro +'    city :' + student.address[0].city+'<br/>' );
           });


    补充:至于JSON为什么能这样取得数据的值? It is based on a subset of the JavaScript Programming LanguageStandardECMA-262 3rd Edition - December 1999.      它是javascript的一个子集、javascript会对其进行解析(如何实现暂不理会)。

     

    四:json格式的字符串、和json对象(对于什么时候称作json对象不做深究)的区别:

    很简单:json格式的字符串、很明显就是一个字符串、只具有字符串的特性和功能。只是格式上看起来像json对象而已、而不具有json对象所具有的功能(比如上面的例子中拿到student对象的某个属性的值、上面是String的话、student.sno能获得sno的值吗?某老师的话:自己动手试试……)。

    $(document).ready(function showStudent(){
    		var student = 
    		{
    			
    			"sno":"001",
    			"name":"jack",
    			"age":130,
    			"address":
    			[
    				{"pro":"anhui","city":"fuyang"},
    				{"pro":"jiangsu","city":"nanjing"}
    			]
    		
    		}
    		document.write('sno :' + student.sno    + '    name:' + student.name    +'    age :' + student.age    +'    pro :' + student.address[0].pro +'    city :' + student.address[0].city +'<br/>' );
    	});
    


    注意:别把

    typeof(studentJson)+'<br/>

    '写成

    typeof(studentJson +'<br/>')


    这样就成了JSON对象与String拼接了、结果会变成两个string…

    JSON格式Str与JSON对象之间的转换

    一:Object转换成JSONStr

    	$(document).ready(function Object2JSONString(){
    		var student = new Student("001","chy");
    		var studentJson = student.toJSONString();
    		document.write(typeof(studentJson) + '<br/>');
    		document.write(studentJson + '<br/>');
    	});
    	//toJOSNString() 可以把json格式的字符串或者Object转换成json对象
    	function Student(sno, name){
    		this.sno = sno;
    		this.name = name;
    	}

    二:JSONStr转换成JSON对象

    	$(document).ready(function str2json () {
    		var studentStr  = '{"sno":"001","name":"jack","age":123}';
    		//不推荐、存在安全隐患
    		var studentJson = eval('('+studentStr+')');
    		//缺陷:不能适用于所有的浏览器
    		var studentJson2 = JSON.parse(studentStr);
    		//需下载jquery.json-2.4.js、未实现
    		//var studentJson3 = jQuery.toJSON(studentStr); 
    		//document.write(typeof(studentJson3)+'<br/>' );
    		document.write(typeof(studentStr) +'<br/>' );
    		document.write(typeof(studentJson)+'<br/>' );
    		document.write(typeof(studentJson2)+'<br/>' );
    	})

    三:JSON对象转换成JSONStr

    	$(document).ready(function json2str () {
    		var studentJson  = {"sno":"001","name":"jack","age":123};
    		//toJSONString()方法需要借助json.js文件(可去官方网站下载)
    		var studentStr = studentJson.toJSONString();
    		var studentStr2 = JSON.stringify(studentJson);
    		document.write(studentStr +'<br/>' );
    		document.write(studentStr2 +'<br/>' );
    		document.write(typeof(studentStr) +'<br/>' );
    		document.write(typeof(studentJson)+'<br/>' );
    	})

    JSON遍历

    四种遍历方式:

    <!DOCTYPE HTML>
    <html>
    	<script src="jquery.min.js"></script>
    	<script type="text/javascript">
    		function firstMethod(){
    			var list1 = [1,3,4];
    			document.write(list1[1]+'<br/>');
    			var list2 = [{"name":"leamiko","xing":"lin"}];
    			document.write(list2[0]["xing"]+'<br/>');
    			document.write(list2[0].xing+'<br/>');
    			document.write("==========================================================="+'<br/>');
    		}
    
    		function secondMethod(){
    			var value = 
    			{
    			    "china":
    			    {
    			        "hangzhou":{"item":"1"},
    			        "shanghai":{"item":"2"},
    			        "chengdu":{"item":"3"}
    			    },
    			    "America":
    			    {
    			        "aa":{"item":"1"},
    			        "bb":{"item":"2"}   
    			    },
    			    "Spain":
    			    {
    			        "dd":{"item":"1"},
    			        "ee":{"item":"2"},
    			        "ff":{"item":"3"}   
    			    }
    			};
    	
    			//向里循环的时候只能用external[internal][deeperinternal]...而不能用external.internal.deeperinternal...原因不知道。。。当json类型是{...}时for(var x in value)x指的是每一个值、当json类型是[]时 x指的是数组下标。根据情况利用
    
    
    			for(var country in value){
    				document.write(country +':<br/>');
    				for(var city in value[country]){
    					document.write('   '+city+':</br>');
    					for(var item in value[country][city]){
    						document.write('   '+value[country][city][item]+':</br>');
    					}
    				}
    			}
    			document.write("==========================================================="+'<br/>');
    
    		}
    
    		function thirdMethod(){
    			var value = {
    			    "china":
    			    [
    			        {"name":"hangzhou", "item":"1"},
    			        {"name":"shanghai", "item":"2"},
    			        {"name":"sichuan", "item":"3"}
    			    ],
    			    "America":
    			    [
    			        {"name":"aa", "item":"12"},
    			        {"name":"bb", "item":"2"}
    			    ],
    			    "Spain":
    			    [
    			        {"name":"cc", "item":"1"},
    			        {"name":"dd", "item":"23"},
    			        {"name":"ee", "item":"3"}
    			    ]
    			};
    			for(var country in value){
    				document.write(country+'<br/>');
    				for(var x in value[country]){
    					document.write('cityname: ' + value[country][x]["name"] + '  item: ' + value[country][x]["item"] + '<br/>');
    				}
    			}
    			document.write("==========================================================="+'<br/>');
    
    		}
    
    		
    		function fourthMethod(){
    			var value = {
    			    "china":
    			    [
    			        {"name":"hangzhou", "item":"1"},
    			        {"name":"shanghai", "item":"2"},
    			        {"name":"sichuan", "item":"3"}
    			    ],
    			    "America":
    			    [
    			        {"name":"aa", "item":"12"},
    			        {"name":"bb", "item":"2"}
    			    ],
    			    "Spain":
    			    [
    			        {"name":"cc", "item":"1"},
    			        {"name":"dd", "item":"23"},
    			        {"name":"ee", "item":"3"}
    			    ]
    			};
    			for(var country in value){
    				document.write(country+'<br/>');
    				for(var i=0; i<value[country].length; i++){
    					document.write('cityname: ' + value[country][i]["name"] + '  item: ' + value[country][i]["item"] + '<br/>');
    				}
    			}
    			document.write("==========================================================="+'<br/>');
    
    		}
    
    		$(document).ready=firstMethod();
    		$(document).ready=secondMethod();
    		$(document).ready=thirdMethod();
    		$(document).ready=fourthMethod();
    	</script>
    <body>
    
    </body>
    </html>
    

    JSON在struts2中的使用

    说白了、json在java web项目中的应用本质就是客户端请求到服务端、服务端将数据处理成json格式返回给客户端、客户端再根据返回的数据进行下一步操作。。。采用json就

    是因为json更容易和快速的被解析、我们又可以根据自己的需要在后台设定好数据格式、这样在前台可以直接拿来用或者加工一下。。。。

    (最好是下个能直接用的项目、然后自己动手多试、自己搭、如果jar包冲突、搞了半天没解决、什么激情也没有了、还什么都没有干、、、)

    只搞一种、有时间补充:

    1、jar包

    commons-beanutils-1.7.0.jar

    commons-fileupload-1.2.1.jar

    commons-io-1.3.2.jar

    commons-lang-2.3.jar

    commons-logging-1.0.4.jar

    ezmorph-1.0.3.jar

    freemarker-2.3.15.jar

    json-lib-2.1.jar

    ognl-2.7.3.jar

    struts2-core-2.1.8.1.jar

    struts2-json-plugin-2.1.8.1.jar

    xwork-core-2.1.6.jar


    2、struts.xml

    <package name="default" namespace="/" extends="json-default">
        	<action name="jsontest" class="struts2jsonjquery.test.action.JsonJqueryStruts2Action">
        		<!-- 返回单个值的result -->
        		<result name="message" type="json"></result>
        		<!-- 返回UserInfo对象的 -->
        		<result name="userInfo" type="json"></result>
        		<!-- 返回List对象的 -->
        		<result name="list" type="json"></result>
        		<!-- 返回Map对象的 -->
        		<result name="map" type="json"></result>
        	</action>
        </package>

    3、jsp

    <%@ page language="java" pageEncoding="GBK"%>
    <%
    	String path = request.getContextPath();
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        
        <title>Struts2+JQuery+JSON</title>
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<meta http-equiv="expires" content="0">    
    	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    	<meta http-equiv="description" content="This is my page">
    	<script type="text/javascript" src="<%=path %>/js/jquery.js"></script>
    	<script type="text/javascript" src="<%=path %>/js/jsonstyle.js"></script>
      </head>
      
      <body>
        <input id="getMessage" type="button" value="获取单个值"/>  
        <input id="getUserInfo" type="button" value="获取UserInfo对象"/>  
        <input id="getList" type="button" value="获取List对象"/>  
        <input id="getMap" type="button" value="获取Map对象"/>  
        <br>
        <br>
        <br>
        <!-- 要显示信息的层 -->
        <div id="message"></div>
        <form>
        	用户ID:<input name="userInfo.userId" type="text"/><br/>
        	用户名:<input name="userInfo.userName" type="text"/><br/>
        	密   码:<input name="userInfo.password" type="text"/><br>
        	<input id="regRe" type="button" value="注册"/>
        </form>
      </body>
    </html>
    
    其中的jsonstyle.js代码:

    //初始加载页面时
    $(document).ready(function(){
    	//为获取单个值的按钮注册鼠标单击事件
    	$("#getMessage").click(function(){
    		$.getJSON("jsontest!returnMessage.action",function(data){
    			//通过.操作符可以从data.message中获得Action中message的值
    			$("#message").html("<font color='red'>"+data.message+"</font>");
    		});
    	});
    	//为获取UserInfo对象按钮添加鼠标单击事件
    	$("#getUserInfo").click(function(){
    		$.getJSON("jsontest!returnUserInfo.action",function(data){
    			//清空显示层中的数据
    			$("#message").html("");
    			//为显示层添加获取到的数据
    			//获取对象的数据用data.userInfo.属性
    			$("#message").append("<div><font color='red'>用户ID:"+data.userInfo.userId+"</font></div>")
    					     .append("<div><font color='red'>用户名:"+data.userInfo.userName+"</font></div>")
    					     .append("<div><font color='red'>密码:"+data.userInfo.password+"</font></div>")
    		});
    	});
    	//为获取List对象按钮添加鼠标单击事件
    	$("#getList").click(function(){
    		$.getJSON("jsontest!returnList.action",function(data){
    			//清空显示层中的数据
    			$("#message").html("");
    			//使用jQuery中的each(data,function(){});函数
    			//从data.userInfosList获取UserInfo对象放入value之中
    			$.each(data.userInfosList,function(i,value){
    				$("#message").append("<div>第"+(i+1)+"个用户:</div>")
    						 .append("<div><font color='red'>用户ID:"+value.userId+"</font></div>")
    					     .append("<div><font color='red'>用户名:"+value.userName+"</font></div>")
    					     .append("<div><font color='red'>密码:"+value.password+"</font></div>");
    			});
    		});
    	});
    	//为获取Map对象按钮添加鼠标单击事件
    	$("#getMap").click(function(){
    		$.getJSON("jsontest!returnMap.action",function(data){
    			//清空显示层中的数据
    			$("#message").html("");
    			//使用jQuery中的each(data,function(){});函数
    			//从data.userInfosList获取UserInfo对象放入value之中
    			//key值为Map的键值
    			$.each(data.userInfosMap,function(key,value){
    				$("#message").append("<div><font color='red'>用户ID:"+value.userId+"</font></div>")
    					     .append("<div><font color='red'>用户名:"+value.userName+"</font></div>")
    					     .append("<div><font color='red'>密码:"+value.password+"</font></div>");
    			});
    		});
    	});
    	//向服务器发送表达数据
    	$("#regRe").click(function(){
    		//把表单的数据进行序列化
    		var params = $("form").serialize();
    		//使用jQuery中的$.ajax({});Ajax方法
    		$.ajax({
    			url:"jsontest!gainUserInfo.action",
    			type:"POST",
    			data:params,
    			dataType:"json",
    			success:function(data){
    				//清空显示层中的数据
    			$("#message").html("");
    			//为显示层添加获取到的数据
    			//获取对象的数据用data.userInfo.属性
    			$("#message").append("<div><font color='red'>用户ID:"+data.userInfo.userId+"</font></div>")
    					     .append("<div><font color='red'>用户名:"+data.userInfo.userName+"</font></div>")
    					     .append("<div><font color='red'>密码:"+data.userInfo.password+"</font></div>")
    			}
    		});
    	});
    });



    4、action

    package struts2jsonjquery.test.action;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import struts2jsonjquery.test.entity.UserInfo;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class JsonJqueryStruts2Action extends ActionSupport {
    
    	private static final long serialVersionUID = 3518833679938898354L;
    	
    	private String message;		//使用json返回单个值
    	private UserInfo userInfo; 		//使用json返回对象
    	private List<UserInfo> userInfosList;		//使用josn返回List对象
    	private Map<String,UserInfo> userInfosMap; 	//使用json返回Map对象
    	//为上面的的属性提供get,Set方法
    	public String getMessage() {
    		return message;
    	}
    	public void setMessage(String message) {
    		this.message = message;
    	}
    	public UserInfo getUserInfo() {
    		return userInfo;
    	}
    	public void setUserInfo(UserInfo userInfo) {
    		this.userInfo = userInfo;
    	}
    	public List<UserInfo> getUserInfosList() {
    		return userInfosList;
    	}
    	public void setUserInfosList(List<UserInfo> userInfosList) {
    		this.userInfosList = userInfosList;
    	}
    	public Map<String, UserInfo> getUserInfosMap() {
    		return userInfosMap;
    	}
    	public void setUserInfosMap(Map<String, UserInfo> userInfosMap) {
    		this.userInfosMap = userInfosMap;
    	}
    	/**
    	 * <p>
    	 * 	返回单个值
    	 * <p>
    	 * @return
    	 */
    	public String returnMessage(){
    		this.message = "成功返回单个值";
    		return "message";
    	}
    	/**
    	 * <p>
    	 * 	返回UserInfo对象
    	 * </p>
    	 * @return
    	 */
    	public String returnUserInfo(){
    		userInfo = new UserInfo();
    		userInfo.setUserId(10000);
    		userInfo.setUserName("张三");
    		userInfo.setPassword("000000");
    		return "userInfo";
    	}
    	/**
    	 * <p>
    	 * 	返回List对象
    	 * </p>
    	 * @return
    	 */
    	public String returnList(){
    		userInfosList = new ArrayList<UserInfo>();
    		UserInfo u1 = new UserInfo();
    		u1.setUserId(10000);
    		u1.setUserName("张三");
    		u1.setPassword("000000");
    		UserInfo u2 = new UserInfo();
    		u2.setUserId(10001);
    		u2.setUserName("李四");
    		u2.setPassword("111111");
    		UserInfo u3 = new UserInfo();
    		u3.setUserId(10002);
    		u3.setUserName("王五");
    		u3.setPassword("222222");
    		UserInfo u4 = new UserInfo();
    		u4.setUserId(10003);
    		u4.setUserName("赵六");
    		u4.setPassword("333333");
    		userInfosList.add(u1);
    		userInfosList.add(u2);
    		userInfosList.add(u3);
    		userInfosList.add(u4);
    		return "list";
    	}
    	/**
    	 * <p>
    	 * 	返回Map对象
    	 * </p>
    	 * @return
    	 */
    	public String returnMap(){
    		userInfosMap = new HashMap<String,UserInfo>();
    		UserInfo u1 = new UserInfo();
    		u1.setUserId(10000);
    		u1.setUserName("张三");
    		u1.setPassword("000000");
    		UserInfo u2 = new UserInfo();
    		u2.setUserId(10001);
    		u2.setUserName("李四");
    		u2.setPassword("111111");
    		UserInfo u3 = new UserInfo();
    		u3.setUserId(10002);
    		u3.setUserName("王五");
    		u3.setPassword("222222");
    		UserInfo u4 = new UserInfo();
    		u4.setUserId(10003);
    		u4.setUserName("赵六");
    		u4.setPassword("333333");
    		userInfosMap.put(u1.getUserId()+"", u1);
    		userInfosMap.put(u2.getUserId()+"", u2);
    		userInfosMap.put(u3.getUserId()+"", u3);
    		userInfosMap.put(u4.getUserId()+"", u4);
    		return "map";
    	}
    	/**
    	 * <p>
    	 * 	获得对象,也就是通过表达获得对象(异步的)
    	 * </P>
    	 * @return
    	 */
    	public String gainUserInfo(){
    		System.out.println("用户ID:"+userInfo.getUserId());
    		System.out.println("用户名:"+userInfo.getUserName());
    		System.out.println("密码:"+userInfo.getPassword());
    		return "userInfo";
    	}
    	/**
    	 * 获得单个值就不用写了和平常一样
    	 */
    }
    

    需要web源码可留下邮箱。。

    展开全文
  • 教程介绍了如何在Android上使用JSONJSON 代表(Java脚本对象表示法)。 它是一种简单且轻量级的数据交换格式,可以由人和机器轻松读取。 JSON 是一种独立于语言的文本格式。 它以文本格式表示数据,因此可以...

    本教程介绍了如何在Android上使用JSON JSON 代表(Java脚本对象表示法)。 它是一种简单且轻量级的数据交换格式,可以由人和机器轻松读取。 JSON 是一种独立于语言的文本格式。 它以文本格式表示数据,因此可以轻松对其进行解析。

    JSON简介

    JSON使用两种不同的结构:

    • 名称/值对的集合
    • 数组

    第一种结构可用于对对象建模,因为对象是保存一些值的属性的集合。 数组可用于建模列表,对象数组等。 因此,使用这两种结构,我们可以以简单有效的方式在两台机器之间传输数据。 最近,JSON取得了巨大的成功,并且大多数可用的API都支持JSON格式。 让我们看看如何用JSON表示数据。

    JSON中的对象使用{..} 进行建模,而属性可以使用 name:值进行建模 。Value可以是对象,数组或“简单”值,例如原始值(int,字符串,布尔值等)。


    因此,如果我们有一个像这样的java类:

    public class Person {
    
        private String name;
        private String surname;    
           .....
    }

    可以用JSON表示

    {"surname":"Swa",
     "name":"Android",
      ....
    }

    数组使用[..]表示为JSON。 数组元素可以是对象,数组等。

    现在我们知道了更好的JSON格式,我们可以开始在Android中使用JSON了。

    在Android中使用JSON

    在Android中以及通常在所有环境中,都有两种类型的操作:

    • 将Java类转换为JSON数据 (序列化)
    • 解析JSON数据并创建Java类(反序列化)

    假设我们必须使用HTTP连接将数据发送到远程服务器,并且数据在java类中表示。 首先,我们将Java类转换为JSON数据。 例如,假设我们有一个这样的Person类:

    public class Person {
    
        private String name;
        private String surname;
        private Address address;
        private List<PhoneNumber> phoneList;
    
        // get and set
    
        public class Address {
            private String address;
            private String city;
            private String state;
            // get and set        
        }
    
        public class PhoneNumber {
            private String type;
            private String number;
    
            // get and set      
        }
    }

    如您所见,该类几乎涵盖了所有对象类型:字符串,数组,内部类等等。 如何将其转换为JSON? 让我们创建一个实用程序类。

    public class JsonUtil {
    
    public static String toJSon(Person person) {
          try {
            // Here we convert Java Object to JSON 
            JSONObject jsonObj = new JSONObject();
            jsonObj.put("name", person.getName()); // Set the first name/pair 
            jsonObj.put("surname", person.getSurname());
    
            JSONObject jsonAdd = new JSONObject(); // we need another object to store the address
            jsonAdd.put("address", person.getAddress().getAddress());
            jsonAdd.put("city", person.getAddress().getCity());
            jsonAdd.put("state", person.getAddress().getState());
    
            // We add the object to the main object
            jsonObj.put("address", jsonAdd);
    
            // and finally we add the phone number
            // In this case we need a json array to hold the java list
            JSONArray jsonArr = new JSONArray();
    
            for (PhoneNumber pn : person.getPhoneList() ) {
                JSONObject pnObj = new JSONObject();
                pnObj.put("num", pn.getNumber());
                pnObj.put("type", pn.getType());
                jsonArr.put(pnObj);
            }
    
            jsonObj.put("phoneNumber", jsonArr);
    
            return jsonObj.toString();
    
        }
        catch(JSONException ex) {
            ex.printStackTrace();
        }
    
        return null;
    
    }

    让我们分析一下代码。 在第6行,我们创建了一个新的JSON对象,它充当我们数据的容器。 接下来,我们放置一些名称/值对(第7-8行)。 如您所见,它们与Person类的属性匹配。 查看Person类的第10行,我们注意到我们有一个内部类,因此我们需要另一个JSON对象来表示它(第10-13行)。 构建JSON对象后,将其放在主对象第16行中。在第17行中,Person类中有一个电话列表。 在这种情况下,我们需要一个JSONArray来对java List进行建模,对于列表中的每个项目,我们都需要JSON Object进行映射。 运行本文结尾处提供的源代码,我们将具有:

    {
       "phoneNumber": [
          {
             "type": "work",
             "num": "11111"
          },
          {
             "type": "home",
             "num": "2222"
          }
       ],
       "address": {
          "state": "World",
          "address": "infinite space, 000",
          "city": "Android city"
       },
       "surname": "Swa",
       "name": "Android"
    }

    这是我们的Person对象的JSON表示形式。 我使用了一个不错的网站来帮助测试JSON数据( http://www.jsontest.com/ )。 从结果中可以看到,我们的JSON数据有效:

    android_json_tutorial [4]

    解析JSON数据:反序列化

    另一个有趣的方面是解析JSON数据并创建Java类。 即使有自动工具根据JSON数据创建POJO类,也要知道背后的内容,这一点很重要。 当您拥有JSON数据时,第一步是实例化一个解析器,该解析器有助于获取JSON中的值。

    JSONObject jObj = new JSONObject(data);

    数据包含JSON字符串的位置。 现在查看JSON数据文件,我们可以开始提取数据。 例如,如果我们假设获得了与上面显示的JSON数据类似的JSON数据(请参阅JSON Person数据),并且我们想要获得姓氏:

    String surname = jObj.getString("surname");

    当我们要获取地址对象时,可以使用:

    JSONObject subObj = jObj.getJSONObject("address");
    String city = subObj.getString("city");
    ...

    如果我们要获取电话号码列表,我们只需:

    JSONArray jArr = jObj.getJSONArray("list");
    for (int i=0; i < jArr.length(); i++) {
        JSONObject obj = jArr.getJSONObject(i);
        ....
    }

    使用这些代码,我们可以在Android中处理JSON。 如果您对更复杂的JSON示例感兴趣,请查看Android weather app:JSON,HTTP和Openweathermap 在此说明如何创建一个可获取当前天气状况的完整应用程序。

    可用的源代码@ github

    参考: Android JSON教程:通过Surviving w / Android博客从我们的JCG合作伙伴 Francesco Azzola 创建和解析JSON数据

    翻译自: https://www.javacodegeeks.com/2013/10/android-json-tutorial-create-and-parse-json-data.html

    展开全文
  • Json使用教程

    千次阅读 2019-07-09 13:18:11
    Json使用教程 使用第三方静态库的步骤: 1、编译文件生成静态库。 2、把相关的.h文件放入D:\VS2005安装目录\VC\include路径下。 3、把相应的.lib文件放在D:\VS2005安装目录\VC\lib路径下。 在使用中只需要将json.rar...

    Json使用教程

    使用第三方静态库的步骤:
    1、编译文件生成静态库。
    2、把相关的.h文件放入D:\VS2005安装目录\VC\include路径下。
    3、把相应的.lib文件放在D:\VS2005安装目录\VC\lib路径下。
    在使用中只需要将json.rar中的文件添加(并包含)到项目中
    链接:json.rar下载地址
    在需要使用Json的文件中添加json.h的头文件即可使用了
    使用教程如下:
    JsonCpp 是一个C++用来处理JSON 数据的开发包。下面讲一下怎么使用JsonCpp来序列化和反序列化Json对象,以实际代码为例子。

    反序列化Json对象

    比如一个Json对象的字符串序列如下,其中”array”:[…]表示Json对象中的数组:
    {“key1″:”value1″,”array”:[{“key2”:“value2”},{“key2”:“value3”},{“key2”:“value4”}]},那怎么分别取到key1和key2的值呢,代码如下所示:

    std::string strValue = “{\”key1\”:\”value1\”,\”array\”:[{\"key2\":\"value2\"},{\"key2\":\"value3\"},{\"key2\":\"value4\"}]}”;
    
    Json::Reader reader;
    Json::Value value;
    
    if (reader.parse(strValue, value))
    {
    std::string out = value["key1"].asString();
    std::cout << out << std::endl;
    const Json::Value arrayObj = value["array"];
    for (int i=0; i<arrayObj.size(); i++)
    {
    out = arrayObj[i]["key2"].asString();
    std::cout << out;
    if (i != arrayObj.size() – 1 )
    std::cout << std::endl;
    }
    }
    

    序列化Json对象

    先构建一个Json对象,此Json对象中含有数组,然后把Json对象序列化成字符串,代码如下:

    Json::Value root;
    Json::Value arrayObj;
    Json::Value item;
    for (int i=0; i<10; i++)
    {
    item["key"] = i;
    arrayObj.append(item);
    }
    
    root["key1"] = “value1″;
    root["key2"] = “value2″;
    root["array"] = arrayObj;
    root.toStyledString();
    std::string out = root.toStyledString();
    std::cout << out << std::endl;
    

    删除Json对象
    std::string strContent = “{“key”:“1”,“name”:“test”}”;

    Json::Reader reader;
    
    Json::Value value;
    
    if (reader.parse(strContent, value))
    {
        Json::Value root=value;
    
        root.removeMember("key");
    
        printf("%s \n",root.toStyledString().c_str());
    

    JSON的嵌套
    、json简介
    1.JSON来历:JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。
    2.JSON作用:JSON对象作为一种通用的中间层,用于跨平台跨语言传输数据
    3.JSON语法规范:JSON种有四种基础类型(string,boolean,int,null),有两种复杂类型(array,Object),由于不同平台不同语言的差异性,在各自语言有各自对JSON的理解,Object类型可以理解为对象,也可以认为是哈希表,键值对等。复杂类型之间可以互相嵌套,比如array中含有多个Object,而其中的Object又含有array.
    4.Linux下C++中使用JSON:有多种方案,这里使用jsoncpp开源跨平台框架, jsoncpp的安装参考如下链接:linux下正确安装jsoncpp框架,或者自己搜索相关博客安装
    5.使用JSONCPP框架: 参考上述链接将其安装后,其动态链接库libjson.so已在系统默认库中(/lib/),相关头文件也在默认系统头文件库中( /usr/include/),此时只需在代码中保护相应头文件,如#include < json/json.h>,在链接时加上-ljson参数链接上libjson.so库即可,例如
    g++ -c main.cpp -o main.o #编译
    g++ -o main main.o -ljson #链接
    ./main #运行
    二 、直接赋值产生json对象
    jsoncpp中使用JSON::Value类型来包含Json对象,如下产生简单的Json对象

    #include
    #include
    #include <json/json.h>

    using namespace std;

    int main()
    {
    Json::Value a,b,c,d,e;
    a = 12; //int
    b = “hello”;//string
    c = false; //boolean
    d = true; //boolean
    //eΪnull
    cout << “First” << endl;
    cout << a.asInt() << endl;
    cout << b.asString() << endl;
    cout << c.asString() << endl;
    cout << d.asString() << endl;
    cout << e.asString() << endl;

    //也可以使用复制构造函数来初始化生成JSON对象
    a = Json::Value(13);
    b = Json::Value("hello world");
    c = Json::Value(false);
    d = Json::Value(true);
    e = Json::Value();
    cout << "Second" << endl;
    cout << a.asInt() << endl;
    cout << b.asString() << endl;
    cout << c.asString() << endl;
    cout << d.asString() << endl;
    cout << e.asString() << endl;
    return 0;
    

    }
    运行结果如下所示:
    在这里插入图片描述
    三 、从JSON字符流中读取json对象
    使用过JSON都知道,JSON对象传输时的形态为字符流,从JSON字符流中取出JSON对象具有重要应用意义
    jsoncpp中使用Json::Reader类型来读取字符流中的数据,如下
    #include
    #include
    #include <json/json.h>

    using namespace std;
    int main()
    {
    string message = “{ “data” : { “username” : “test” }, “type” : 6 }”;
    Json::Reader reader;
    Json::Value value;
    //如果message符合Json对象语法,则取出该对象存在value中
    if(reader.parse(message.c_str(), value))
    {
    Json::Value temp = value[“data”]; //取出value对象中的data对象,对象嵌套的一种方式
    cout << “username:” << temp[“username”].asString() << endl;
    cout << “type:” << value[“type”].asInt() << endl;
    cout << “id:” << value[“id”].asString() << endl; //取出null
    }
    return 0;
    }
    结果如下所示:
    在这里插入图片描述
    四 、将json对象转为字符流
    将json对象转为字符流才能用于传输交互,代码如下
    采用Json::Value对象自带的toStyledString()转变成带有格式的JSON字符流
    或者
    使用Json::FastWriter类型进行操作,将Json对象写为字符流
    #include
    #include <json/json.h>
    #include
    using namespace std;

    int main()
    {
    Json::Value value;
    //使用赋值的方式产生JSON对象
    value[“name”] = “kangkang”;
    Json::Value data;
    data[“id”] = “20140801”; //账号
    data[“pwd”] = “123456”; //密码
    value[“data”] = data; //对象嵌套

    //使用toStyledString()函数直接将value对象转为JSON字符流
    cout << "toStyledString()" << endl;
    cout << value.toStyledString() << endl;
    
    //使用Json::FastWriter类型
    Json::FastWriter fw;
    cout << "Json::FastWriter()" << endl;
    cout << fw.write(value) << endl;
    return 0;
    

    }
    结果如下
    在这里插入图片描述
    通常Json::FastWriter产生的格式才是我们传输过程中使用的格式。

    展开全文
  • JSON教程

    2019-12-10 11:33:22
    JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本信息的语法。类似 XML。 JSON 比 XML 更小、更快,更易解析。 JSON 实例 { "sites": [ { "name":"菜鸟教程" , "url":...

    JSON: JavaScript Object Notation(JavaScript 对象表示法)

    JSON 是存储和交换文本信息的语法。类似 XML。

    JSON 比 XML 更小、更快,更易解析。

    JSON 实例

    {
        "sites": [
        { "name":"菜鸟教程" , "url":"www.runoob.com" }, 
        { "name":"google" , "url":"www.google.com" }, 
        { "name":"微博" , "url":"www.weibo.com" }
        ]
    }
    

    这个 sites 对象是包含 3 个站点记录(对象)的数组。

    什么是 JSON ?

    JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
    JSON 是轻量级的文本数据交换格式
    JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。
    JSON 具有自我描述性,更易理解

    JSON - 转换为 JavaScript 对象

    JSON 文本格式在语法上与创建 JavaScript 对象的代码相同。

    由于这种相似性,无需解析器,JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象。

    展开全文
  • JSON实例简单教程

    千次阅读 2018-09-21 22:07:29
    一.JSON简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December...
  • Json是一种轻量级的数据交换格式,采用一种 “键:值” 对的文本格式来存储和表示数据,在系统交换数据过程中常常被使用,是一种理想的数据交换语言。在使用Java做Web开发时,不可避免的会遇到Json的使用。下面我们...
  • JSON使用教程

    2018-11-07 21:42:55
    JSON:Javascript对象表示法(Javascript Object Notation)。JSON是存储和交换文本信息的语法。类似XML。但比XML更小、更快、更易解析。 1、创建JSON对象,并在网页上显示信息 JavaScript代码 &lt;...
  • Json详解以及fastjson使用教程

    万次阅读 多人点赞 2018-09-10 10:13:47
    Json是一种轻量级的数据交换格式,采用一种“键:值”对的文本格式来存储和表示数据,在系统交换数据过程中常常被使用,是一种理想的数据交换语言。在使用Java做Web开发时,不可避免的会遇到Json的使用。下面我们就...
  • JSON 教程

    2018-08-01 11:02:57
    JSON 教程 JSON 简介 JSON 语法  JSON 使用 JSON 教程 JSON 简介 JSON:JavaScript 对象表示法(JavaScript Object Notation)。 JSON 是存储和交换文本信息的语法。类似 XML。 JSON 比 XML 更小、更快,...
  • Json教程

    2016-08-22 19:43:52
    Json教程: http://www.sojson.com/json/
  • Python JSON 教程

    2019-07-31 12:33:22
    Python JSON 教程 本文我们通过示例学习python中解析、读取和写入json。同时也涉及到转换json至字典和格式化打印。 1. json 介绍 JSON (JavaScript Object Notation) 是很常用的表示数据结构规范,web应用中常作...
  • Qt之JSON教程-使用篇

    2019-07-08 09:43:36
    以故事方式来学习如何使用Qt接口来操作JSON数据。
  • Qt之JSON教程-实战篇

    2019-07-11 09:48:02
    JSON三兄弟实战例子的后续故事。
  • 最近想学json,请问大家有没有什么好的Json教程介绍一下? 最近学完java的框架了,想了解一下json,可是找不到相关视频,请大家有这方面的Json教程好资料就介绍下啦,最后有网址链接啦。 {}表示对象,以 键:值 对...
  • json教程及json在Java中的使用

    千次阅读 2017-05-16 23:05:00
    说明:JSON是开发中最常用的一种数据交换格式,这里我将根据自己的学习以及开发经验来对json进行一些讲解,并介绍一下json在Java最常用的用法来与大家共同学习。
  • Swift JSON 教程:使用 JSON

    千次阅读 2017-05-11 17:44:57
    原文:Swift JSON Tutorial: Working with JSON 作者:Luke Parham 译者:kmyhy 2017-1-15 更新说明:本教程由 Luke Parham 更新为 Xcode 8.2 和 Swift 3。原文作者是 Attila Hegedüs。 JavaScript Object ...
  • JSON教程 pdf

    千次下载 热门讨论 2020-07-29 14:21:30
    JSON教程 pdf
  • 我觉得每个人都应该好好的去研究一下json的底层实现,基于这样的认识,金丝燕网推出了一个关于json的系列教程,分析一下json的相关内容,希望大家能有所收获。首先给大家说一下使用json前的准备工作,需要准备下面的...
  • JSONJSON 教程

    2017-12-08 09:09:05
    JSON 教程 JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本信息的语法。类似 XML。 JSON 比 XML 更小、更快,更易解析。 JSON 实例 {"sites": ...
  • JSONPath(XPath for JSON)解析 JSON教程

    千次阅读 2019-06-04 20:13:46
    类似于XPath在xml文档中的定位,JsonPath表达式通常是用来路径检索或设置Json的。其表达式可以接受“dot–notation”和“bracket–notation”格式,例如$.store.book[0].title、$[‘store’][‘book’][0][‘title’...
1 2 3 4 5 ... 20
收藏数 113,799
精华内容 45,519
关键字:

json教程