JavaScript之——JSON总结

    最近实习在做项目,发现项目中后台和前端基本用JSON数据交换。今天下午刚好空闲,就在网上看了些JSON参考教材,并结合项目知识,写了下记录,来加深对JSON的理解。

· 什么是 Json

     JSONJvaScript Object Notation)(官网网站:http://www.json.org/)是 一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。它基于 JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999 的一个子集。 JSON 采用完全独立于语言的文本格式,但是也使用了类似于 C 语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使 JSON 成为理想的数据交换语言。

· JSON 的两种结构

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

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

示例:var json = {"name":"Jack","age":90,"Marray":true};


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

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

示例:var json = ["Jack","Rose","Tom",89,true,false];


Json-lib需要的包

因为项目是用Maven构建的,所有只需在项目pom.xml中添加如下该包的坐标

<!-- https://mvnrepository.com/artifact/org.kohsuke.stapler/json-lib -->
	<dependency>
    <groupId>org.kohsuke.stapler</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.1-rev6</version>
	</dependency>
    

测试代码如下


package trade.axht.json.Test;

import java.util.Arrays;

import net.sf.json.*;

import java.util.*;

import org.junit.Test;

import trade.axht.json.Person;
import junit.framework.TestCase;

public class JsonTest extends TestCase {
	
	/**
	 * 将Array解析成Json串,使用JSONArray可以解析Array类型。
	 * Json有两种数据结构:
	 * 1 "名称/值"对的集合。
	 * 2 值的有序列表
	 */
	@Test
	public void testArrayToJson(){
		
		String[] str={"Java","C","C#"};
		JSONArray jsonArray=JSONArray.fromObject(str);
		System.out.println(jsonArray);
		
		jsonArray=JSONArray.fromObject(new Object[]{"北京","上海",89,true,90.87});
		System.out.println(jsonArray);
        
		jsonArray=JSONArray.fromObject(Arrays.asList("上海","北京","四川"));
		System.out.println(jsonArray);
		
		Set<Object> set=new HashSet<Object>();
		set.add("ab"); set.add(true);
		System.out.println(JSONArray.fromObject(set));
	}
	
	@Test
	public void testJSONObject(){
		
		//解析HashMap
		Map<String,Object> map=new HashMap<String,Object>();
		map.put("name", "Brozer");
		map.put("age", 21);
		JSONObject jsonObject=JSONObject.fromObject(map);
		System.out.println(jsonObject);
		
		//解析JavaBean
		Person person=new Person("Brozer", "Man", 21, "BRIEF BUT NOT SIMPLE");
		jsonObject=JSONObject.fromObject(person);
		System.out.println(jsonObject);
		
		//解析嵌套的对象
		map.put("person",person);
		jsonObject=JSONObject.fromObject(map);
		System.out.println(jsonObject);
		
	}
	
	/**
	 *使用JsonConfig过滤属性:适用于JavaBean/Map 
	 */
	@Test
	public void testJsonConfig(){
		JsonConfig jsonConfig=new JsonConfig();
		//指定在转换时不包含哪些属性
		jsonConfig.setExcludes(new String[]{"name"});
		Person person=new Person("Brozer", "man", 21, "BRIEF BUT NO SIMPLE");
		JSONObject jsonObject=JSONObject.fromObject(person, jsonConfig);
		System.out.println(jsonObject);
		
	}
	
	
	@Test
	public void testJsonToArray(){
		//将Json串转换成Array
		JSONArray jsonArray=JSONArray.fromObject("[89,90,99]");
		Object array=JSONArray.toArray(jsonArray);
		System.out.println(array);
		System.out.println(Arrays.asList((Object[])array));
		
		//将Json形式的字符串转换成Map
		String str="{\"name\":\"Tom\",\"age\":90}";
		JSONObject jsonObject=JSONObject.fromObject(str);
		Map<String,Object> map=(Map<String,Object>)JSONObject.toBean(jsonObject, Map.class);
		System.out.println(map);
		
		//将Json形式的字符串转成Bean
		str="{\"name\":\"Brozer\",\"age\":21,\"sex\":\"man\",\"description\":\"BRIEF BUT NOT SIMPLE\"}";
		jsonObject=JSONObject.fromObject(str);
		Person person=(Person) jsonObject.toBean(Person.class);
		System.out.println(person);
	}
	
	
	
	
}


Person.java

package trade.axht.json;

public class Person {
	private String name;
	private String sex;
	private int age;
	private String description;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
	public Person(String name, String sex, int age, String description) {
		super();
		this.name = name;
		this.sex = sex;
		this.age = age;
		this.description = description;
	}
	public Person() {
		super();
		// TODO Auto-generated constructor stub
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", sex=" + sex + ", age=" + age
				+ ", description=" + description + "]";
	}
	
	
	
}


注意:复制时请修改包名。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月夜归醉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值