0
点赞
收藏
分享

微信扫一扫

JSON总结

七千22 2022-01-26 阅读 40
json前端

JSON

简介

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,而且它是基于JavaScript 的

JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript 等)。这些特性使JSON成为理想的数据交换语言。

JSON 文件的文件类型是 .json,JSON 文本的 MIME 类型是 application/json

  • JSON有两种结构:

    “名/值”对的集合(A collection of name/value pairs)。在不同的语言中,它被理解为对象,结构,关联数组等

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

JSON的基本形式

  • 对象是一个无序的“名/值”对集合。一个对象以“{”开始,“}”结束。每个“名称”后跟一个“:” ,“名/值”对之间使用“,” 分隔
    在这里插入图片描述

  • 数组是值(value)的有序集合。一个数组以“[”开始,“]”结束。值之间使用“,”分隔
    在这里插入图片描述

字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。

值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套

实例

JSON表示名称/值对:
{ "firstName": "test" } 

多个名称/值对串在一起:
{ "firstName": "test", "lastName":"xxxx", "email": "xxx@new.com" }

{ “employees": [
  { "firstName": "a1", "lastName":"t1", "email": "y1@new.com" },
  { "firstName": "a2", "lastName":"t2", "email": "y2@new.com" },
  { "firstName": "a3", "lastName":"t3", "email": "y3@new.com" }
] }

JSON vs XML(了解即可)

  • 可读性

    JSON和XML的可读性可谓不相上下,XML略占上风。

  • 可扩展性

    XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。

  • 编码难度

    XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。

  • 解码难度

    XML的解析得考虑子节点父节点关系,让人头昏眼花,而JSON的解析难度几乎为零。

  • 流行度

    XML已经被业界广泛的使用,而JSON才刚刚开始,但在Ajax领域,JSON凭借自身的优势有可能最终取代XML。

在JavaScript中使用JSON

JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的 API 或工具包。

<script>
	// 将JSON数据赋值给变量
	var company = 
		{ “employees": [
  			{ "firstName": "a1", "lastName":"t1", "email": "y1@new.com" },
  			{ "firstName": "a2", "lastName":"t2", "email": "y2@new.com" },
  			{ "firstName": "a3", "lastName":"t3", "email": "y3@new.com" }
		] };
		
	// 获取第一个雇员的firstName信息
	company.employees[0].fristName;

	//修改数据
	company.employees[0].fristName = “test”;
</script>

客户端处理JSON响应

  • 服务器端返回JSON相应的文本表示,如:
{“name” : “xiaoming”, “age” : “18”}
  • 客户端使用eval()函数将JSON文本转化为JavaScript对象:
<script>
	//使用额外的圆括号可使eval()函数将来源输入无条件地视为表达式进行解析
	var result = eval('(' + request.responseText + ')');
	//取得相应的值
	result.name;
	result[''+ "name" +'']
</script>

Java解析JSON

JSON -> 值,Map,Bean

方法一,利用json-lib.jar

import java.util.Map;
//json-lib-2.4.jar
import net.sf.json.JSONObject;

public class JieXiJSON {
	public static void main(String[] args) {
	
		String jsonStr = "{\"key\":\"小红\",\"value\":\"18\"}";
		JSONObject jsonObject = JSONObject.fromObject(jsonStr);
		String key = jsonObject.getString("key");
		String value = jsonObject.getString("value");
		System.out.println(jsonObject);//{"key":"小红","value":"18"}
		System.out.println(key + "    " + value);//小红    18

		// 将 Json转换为 Map
		Map<String, Object> jsonToMap = (Map<String, Object>) JSONObject.toBean(jsonObject, Map.class);
		System.out.println("将 Json转换为 Map:"+jsonToMap);//将Json转换为 Map:{value=18, key=小红}
		
		// 将 Json转换为 JavaBean
		jsonStr = "{\"name\":\"小李\",\"age\":\"18\"}";
		JSONObject jsonObject1 = JSONObject.fromObject(jsonStr);
		Student jsonToBean = (Student) JSONObject.toBean(jsonObject1, Student.class);
		System.out.println(jsonToBean.getName()+jsonToBean.getAge());//小李18
	}
}

方法二,利用fastjson.jar

//fastjson-1.2.51.jar
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

public class JieXiJSON {

	public static void main(String[] args) {

		String jsonStr = "{\"key\":\"小红\",\"value\":\"18\"}";
		JSONObject jsonObject = JSON.parseObject(jsonStr);
		String key = jsonObject.getString("key");
		String value = jsonObject.getString("value");
		System.out.println(jsonObject);//{"value":"18","key":"小红"}
		System.out.println(key + "    " + value);//小红    18
		
		String str = "{\"result\":[{\"name\":\"小明\",\"age\":\"18\"},{\"name\":\"小红\",\"age\":\"19\"}],\"value\":\"200\"}";
		System.out.println(str);
		/*
			{"result":
					[
						{"name":"小明","age":"18"},
						{"name":"小红","age":"19"}
					],
			"value":"200"
			}
		*/
		JSONObject resJsonObject = JSON.parseObject(str);
		System.out.println(resJsonObject.getString("value"));//200
		for (Object info : resJsonObject.getJSONArray("result")) {
			JSONObject object = (JSONObject)info;
			if(object.get("name") != null){
				System.out.println(object.get("name").toString());
			}
		}
	}
}

Map,Bean -> JSON

方法一,利用json-lib.jar

import java.util.HashMap;
import java.util.Map;
//json-lib-2.4.jar
import net.sf.json.JSONObject;
public class ToJson {

	public static void main(String[] args) {
		
		// 将Map解析成JSON
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("1", "add");
		map.put("2", "del");
		map.put("3", 520);
		JSONObject jsonMap = JSONObject.fromObject(map);
		System.out.println("map:"+map);//map:{3=520, 2=del, 1=add}
		System.out.println("JSON:"+jsonMap);//JSON:{"3":520,"2":"del","1":"add"}	
		
		// 将Bean解析成JSON
		Student student = new Student("小红","23");
		JSONObject jsonBean = JSONObject.fromObject(student);
		System.out.println(jsonBean);//{"age":"23","name":"小红"}
				
		// 嵌套解析成JSON
		Map<String, Object> tempMap = new HashMap<String, Object>();
		tempMap.put("班级", "1班");
		tempMap.put("学生", student);
		JSONObject json = JSONObject.fromObject(tempMap);
		System.out.println(tempMap);
		//{学生=test.constant.json.Student@158c4d4c, 班级=1班}
		System.out.println(json);
		//{"学生":{"age":23,"name":"小红"},"班级":"1班"}

	}
}

方法二,利用fastjson.jar

import java.util.HashMap;
import java.util.Map;

import com.alibaba.fastjson.JSONObject;

public class ToJson {

	public static void main(String[] args) {
		
		// 将Map解析成JSON
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("1", "add");
		map.put("2", "del");
		map.put("3", 520);
		JSONObject jsonMap = new JSONObject(map);
		System.out.println("map:"+map);//map:{1=add, 2=del, 3=520}
		System.out.println("JSON:"+jsonMap);//JSON:{"1":"add","2":"del","3":520}
	}
}
举报

相关推荐

0 条评论