JSON数据格式

JSON格式:http://www.json.org/

python和JSON的关系请参考:http://docs.python.org/library/json.html

  JSON建构有两种结构:

  1. “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。

  2.值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

基础示例

  简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。这个字符串看起来有点儿古怪,但是 JavaScript 很容易解释它,而且 JSON 可以表示比"名称 / 值对"更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。

表示名称 / 值对

  按照最简单的形式,可以用下面这样的 JSON 表示"名称 / 值对":

  { "firstName": "Brett" } 

  这个示例非常基本,而且实际上比等效的纯文本"名称 / 值对"占用更多的空间:

  firstName=Brett 

  但是,当将多个"名称 / 值对"串在一起时,JSON 就会体现出它的价值了。首先,可以创建包含多个"名称 / 值对"的 记录,比如:

  { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" } 

  从语法方面来看,这与"名称 / 值对"相比并没有很大的优势,但是在这种情况下 JSON 更容易使用,而且可读性更好。例如,它明确地表示以上三个值都是同一记录的一部分;花括号使这些值有了某种联系。

表示数组

  当需要表示一组值时,JSON 不但能够提高可读性,而且可以减少复杂性。例如,假设您希望表示一个人名列表。在 XML 中,需要许多开始标记和结束标记;如果使用典型的名称 / 值对(就像在本系列前面文章中看到的那种名称 / 值对),那么必须建立一种专有的数据格式,或者将键名称修改为 person1-firstName这样的形式。

  如果使用 JSON,就只需将多个带花括号的记录分组在一起:

  { "people": [ 

  { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }, 

  { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"}, 

  { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" } 

  ]} 

  这不难理解。在这个示例中,只有一个名为 people的变量,值是包含三个条目的数组,每个条目是一个人的记录,其中包含名、姓和电子邮件地址。上面的示例演示如何用括号将记录组合成一个值。当然,可以使用相同的语法表示多个值(每个值包含多个记录):

  { "programmers": [

  { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }, 

  { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb" }, 

  { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }

  ],

  "authors": [ 

  { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" }, 

  { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" }, 

  { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" } 

  ], 

  "musicians": [ 

  { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" }, 

  { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" } 

  ] } 

  这里最值得注意的是,能够表示多个值,每个值进而包含多个值。但是还应该注意,在不同的主条目(programmers、authors 和 musicians)之间,记录中实际的名称 / 值对可以不一样。JSON 是完全动态的,允许在 JSON 结构的中间改变表示数据的方式。

  在处理 JSON 格式的数据时,没有需要遵守的预定义的约束。所以,在同样的数据结构中,可以改变表示数据的方式,甚至可以以不同方式表示同一事物。

-------------------------------------------------------------------------------------------------------------------------------

实际程序测试json格式:

Json数据格式测试结果:

测试结果1:{"Person":{"address":"香港","id":1001,"name":"刘德华"}}

测试结果2:{"persons":[{"address":"香港","id":1001,"name":"刘德华"},{"address":"韩国","id":1001,"name":"宋慧乔"}]}

测试结果3:{"persons":["美國","中國","俄羅斯"]}

测试结果4:{"persons":[{"id":1001,"address":"香港","name":"刘德华"},{"id":1002,"address":"韩国","name":"宋慧乔"}]}

程序目录:
在MyEclipse建立web project : json_project


Person.java

package com.json.data;

public class Person {
	private int id;
	private String name;
    private String address;
	
	public Person() {
		// TODO Auto-generated constructor stub
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public Person(int id, String name, String address) {
		super();
		this.id = id;
		this.name = name;
		this.address = address;
	}

	@Override
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", address=" + address
				+ "]";
	}
	

}


JsonService.java

package com.json.service;

import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import java.util.List;



import com.json.data.Person;

public class JsonService {

	public JsonService() {
		// TODO Auto-generated constructor stub
	}

	public static Person getPerson() {

		Person person = new Person(1001, "刘德华", "香港");
		return person;

	}

	public static List<Person> getListPersons() {
		List<Person> persons = new ArrayList<Person>();
		Person person1 = new Person(1001, "刘德华", "香港");
		Person person2 = new Person(1001, "宋慧乔", "韩国");
		persons.add(person1);
		persons.add(person2);
		return persons;

	}
	
	public static List<String> getListString(){
		
		List<String> list = new ArrayList<String>();
		list.add("美國");
		list.add("中國");
		list.add("俄羅斯");	
		
		return list;
	} 

	
	public static List<java.util.Map<String, Object>> getListMap(){
		List<java.util.Map<String, Object>> list = new ArrayList<Map<String,Object>>();
		java.util.Map<String,Object> map1 = new HashMap<String,Object>();
		map1.put("id",1001);
		map1.put("name","刘德华");
		map1.put("address","香港");
		
		java.util.Map<String,Object> map2 = new HashMap<String,Object>();
		map2.put("id",1002);
		map2.put("name","宋慧乔");
		map2.put("address","韩国");
		
		list.add(map1);
		list.add(map2);
		
		return list;
		
	}
}

JsonTools.java (创建Json格式的数据)

package com.json.tools;

import net.sf.json.JSONObject;

public class JsonTools {

	/**
	 * @param key 	表示json字符串的头信息
	 * @param value 表示解析几何的类型
	 * @return
	 */
	public static String creatJsonString(String key, Object value) {

		JSONObject jsonObject = new JSONObject();
		jsonObject.put(key, value);
		return jsonObject.toString();
	}

}

TestJson.java

package com.json.test;

import com.json.service.JsonService;
import com.json.tools.JsonTools;

public class TestJson {

	public TestJson() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//Test1 	
		System.out.println("Json数据格式测试结果:\n");
		String jsonString1 = JsonTools.creatJsonString("Person", JsonService.getPerson());
		//Test2
		String jsonString2 = JsonTools.creatJsonString("persons", JsonService.getListPersons());
		//Test3
		String jsonString3 = JsonTools.creatJsonString("persons",JsonService.getListString());
		//Test 4
		String jsonString4 = JsonTools.creatJsonString("persons",JsonService.getListMap());
		
		System.out.println("测试结果1:"+jsonString1+"\n");
		System.out.println("测试结果2:"+jsonString2+"\n");
		System.out.println("测试结果3:"+jsonString3+"\n");
		System.out.println("测试结果4:"+jsonString4);

	}

}
-----------------------------------------------------------------------------------------------------------------------------------
程序二实验结果:(在上面的程序的基础上创建一个servlet,通过GET方式,直接在浏览器输入/servlet/JsonAction , 可访问Json数据格式):
工程更新后的目录,加了一个Servlet : JsonAction.java

JsonAction.java
package com.json.action;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.json.service.JsonService;
import com.json.tools.JsonTools;

public class JsonAction extends HttpServlet {

	JsonService jsonService ;
	/**
	 * Constructor of the object.
	 */
	public JsonAction() {
		super();
	}

	/**
	 * Destruction of the servlet. <br>
	 */
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		this.doPost(request, response);
	}

	/**
	 * The doPost method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to post.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html;charset=utf-8");
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		PrintWriter out = response.getWriter();
		// 获取 person的 list , 保存为json数据
		String jsonString = JsonTools.creatJsonString("persons", jsonService.getListPersons());
		out.println(jsonString);
		
		out.flush();
		out.close();
	}

	/**
	 * Initialization of the servlet. <br>
	 *
	 * @throws ServletException if an error occurs
	 */
	public void init() throws ServletException {
		// Put your code here
		jsonService = new JsonService();
	}

}






JSON数据格式,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。