什么是JSON?

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

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

JSON的基本形式

       {} 双括号表示对象:对象是一个无序的 “名/值” 对的集合(A collection of name/value pairs),一个对象以 “{” 开始,“}” 结束,每个名称后跟一个":",“名/值”对之间使用“,” 分隔。

       [] 中括号表示数组:值的有序列表(An ordered list of values),一个数组以“[”开始,“]”结束,值之间使用“,”分隔。

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

实例

-- 对象
{"name":"小明","age":"18"}

-- 数组
[{"name":"小明","age":"18"},{"name":"小红","age":"19"}]

-- 嵌套
{"code":"200","msg":"成功","data":{"msg":"ssssss","name":"xxxxxx"}}

{
	"value":"200",
	"data":{"msg":"ssssss","name":"xxxxxx"},
	"result":[
			{"name":"小明","age":"18"},
			{"name":"小红","age":"19"} ]
}

       如果需要生成模拟数据,将数据复制到文本编辑器中,采用全部替换,将"替换为\",这样便可以直接使用。

前端解析JSON

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

<script>
	// 将JSON数据赋值给变量
	var str = 
		{ "user": [
  			{ "name":"小明", "age":"18" },
  			{ "name":"小红", "age":"19" }
		] };
		
	// 获取第一条记录的name信息
	str.user[0].name;

	// 修改数据
	str.user[0].name = "小李";
</script>

客户端处理JSON响应

       服务器端返回JSON相应的文本表示,如:

{ "name":"小明", "age":"18" }

       客户端使用 eval()函数 将JSON文本转化为JavaScript对象:

<script>
	// 使用额外的圆括号可使eval()函数将来源输入无条件地视为表达式进行解析
	var resultTmp = eval('(' + request.responseText + ')');
	// 两种方式取得相应的值
	resultTmp.name;
	resultTmp[''+ "name" +''];

	// ajax同理
	$.ajax({
		type : "GET",
	    url : "xxxx?k1=v1",
	    async : false,
	    success : function(data) {
	    	var result = eval('(' + data + ')');
            if (null != result && result != ""){
	        	var info = result['' + "info" + ''];
            }
		}
	});
</script>

Java解析JSON

fastjson方式

       使用 fastjson-x.x.xx.jar,对于方法中根据key获取value时,要注意判断null

方法返回值含义
JSON.parseObject(Strign str)JSONObject对象将json字符串转换为对象
JSONObject对象.getString(“xxx”)返回value值获取对象中的值
如果没有指定的key,则返回null
JSONObject对象.getJSONArray(“xxx”)返回一个JSONArray数组,包含多个JSON对象获取array,需要循环获取数据
不存在则返回null
import java.util.Map;

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

public class AnalysisFirst {

	/*  第一种:最简易的格式
		{
			"key":"小红",
			"value":"18"
		}
	 */
	public static void format1() {
		String jsonStr = "{\"key\":\"小红\",\"value\":\"18\"}";
		JSONObject jsonObject = JSON.parseObject(jsonStr);
		String key = jsonObject.getString("key");
		String value = jsonObject.getString("value");
		System.out.println(jsonStr); // {"key":"小红","value":"18"}
		System.out.println(key + "    " + value); // 小红    18
	}

	/* 第二种:属性值为json,递归操作即可
		{
			"code":"200",
			"msg":"成功",
			"data":{"msg":"ssssss","name":"xxxxxx"},
			"des":{"id":"1","info":"信息"}
		}
	 */
	public static void format2() {
		String jsonStr = "{\"code\":\"200\",\"msg\":\"成功\",\"data\":{\"msg\":\"ssssss\",\"name\":\"xxxxxx\"},\"des\":{\"id\":\"1\",\"info\":\"信息\"}}";
		System.out.println(jsonStr);  // {"code":"200","msg":"成功","data":{"msg":"ssssss","name":"xxxxxx"},"des":{"id":"1","info":"信息"}}
		JSONObject jsonObject = JSON.parseObject(jsonStr);
		System.out.println(jsonObject.getString("code")); // 200
		System.out.println(jsonObject.getString("msg"));  // 成功
		JSONObject dataObject = JSON.parseObject(jsonObject.getString("data"));
		System.out.println(dataObject.getString("msg")); // ssssss
		// 在获取时需要先判断是否为null,避免出现异常
		System.out.println(dataObject.getString("msg1") == null); // true
		System.out.println(JSON.parseObject(jsonObject.getString("des")).getString("info"));
	}
	
	/* 第三种:属性值为array
		{
			"value":"200",
			"des":{"id":"1","info":"信息"},
			"result":
				[
					{"name":"小明","age":"18"},
					{"name":"小红","age":"19"}
				]
		}
	 */
	public static void format3() {
		String jsonStr = "{\"value\":\"200\",\"data\":{\"msg\":\"ssssss\",\"name\":\"xxxxxx\"},\"result\":[{\"name\":\"小明\",\"age\":\"18\"},{\"name\":\"小红\",\"age\":\"19\"}]}";
		System.out.println(jsonStr);
		JSONObject jsonObject = JSON.parseObject(jsonStr);
		for (Object info : jsonObject.getJSONArray("result")) {
			// 一条具体的json数据
			JSONObject object = (JSONObject)info;
			if(object.get("name") != null){
				System.out.println(object.get("name").toString());
				System.out.println(object.getString("name"));
			}
		}
	}
	
	/* 第四种:直接是array,如果每一个里面又是嵌套,依次解析
		[
			{"name": "小明","age": "18"},
			{"name": "小红","age": "19"}
		]
	 */
	public static void format4() {
		String jsonStr = "[{\"name\":\"小明\",\"age\":\"18\"},{\"name\":\"小红\",\"age\":\"19\"}]";
		System.out.println(jsonStr);
		// 方式一:直接作为JSONArray -> map
		JSONArray jsonArray = JSONArray.parseArray(jsonStr);
		if(null != jsonArray && !jsonArray.isEmpty()) {
			for(int i=0; i<jsonArray.size(); i++) {
				Map map = (Map)jsonArray.get(i);
				System.out.println(map.get("name"));
			}
		}
		// 方式二
		for (Object info : JSONArray.parseArray(jsonStr)) {
			// 一条具体的json数据
			JSONObject object = (JSONObject)info;
			if(object.get("age") != null){
				System.out.println(object.getString("age"));
			}
		}
	}
	
	// 将json解析为JavaBean对象
	public static void toJavaBean() {
		String str = "{\"name\":\"小明\",\"age\":\"18\"}";
		System.out.println(str);
		Student student = new Student();
		try {
			student = JSON.parseObject(str, Student.class);
		} catch (Exception e) {
		    e.printStackTrace();
		}
		System.out.println(student.toString());
	}
}

json-lib方式

       使用json-lib-2.4.jar

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

public class JsonTool {
	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
	}
}

android-json方式

       最原始的解析方式,了解即可。

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.alibaba.fastjson.JSON;

public class AnalysisSecond {

	/*
	 * 第一种:最简易的格式 { "key":"小红", "value":"18" }
	 */
	public static void format1() {
		String jsonStr = "{\"key\":\"小红\",\"value\":\"18\"}";
		JSONObject jsonObject;
		try {
			jsonObject = new JSONObject(jsonStr);
			String key = jsonObject.getString("key");
			String value = jsonObject.getString("value");
			System.out.println(jsonStr); // {"key":"小红","value":"18"}
			System.out.println(key + "    " + value); // 小红 18
		} catch (JSONException e) {
			e.printStackTrace();
		}
	}

	/* 第二种:属性值为json,递归操作即可
	{
		"code":"200",
		"msg":"成功",
		"data":{"msg":"ssssss","name":"xxxxxx"},
		"des":{"id":"1","info":"信息"}
	}
	 */
	public static void format2() {
		String jsonStr = "{\"code\":\"200\",\"msg\":\"成功\",\"data\":{\"msg\":\"ssssss\",\"name\":\"xxxxxx\"},\"des\":{\"id\":\"1\",\"info\":\"信息\"}}";
		System.out.println(jsonStr); // {"code":"200","msg":"成功","data":{"msg":"ssssss","name":"xxxxxx"},"des":{"id":"1","info":"信息"}}
		JSONObject jsonObject;
		try {
			jsonObject = new JSONObject(jsonStr);
			System.out.println(jsonObject.getString("code")); // 200
			System.out.println(jsonObject.getString("msg")); // 成功
			JSONObject dataObject = new JSONObject(jsonObject.getString("data"));
			System.out.println(dataObject.getString("msg")); // ssssss
			// 在获取时需要先判断是否为null,避免出现异常
			System.out.println(dataObject.getString("msg1") == null); // true
			System.out.println(JSON.parseObject(jsonObject.getString("des")).getString("info"));
		} catch (JSONException e) {
			e.printStackTrace();
		}
	}

	/*
	 * 第三种:属性值为array { "value":"200", "des":{"id":"1","info":"信息"}, "result": [
	 * {"name":"小明","age":"18"}, {"name":"小红","age":"19"} ] }
	 */
	public static void format3() {
		String jsonStr = "{\"value\":\"200\",\"data\":{\"msg\":\"ssssss\",\"name\":\"xxxxxx\"},\"result\":[{\"name\":\"小明\",\"age\":\"18\"},{\"name\":\"小红\",\"age\":\"19\"}]}";
		System.out.println(jsonStr);
		JSONObject jsonObject;
		try {
			jsonObject = new JSONObject(jsonStr);
			// 返回json的数组
			JSONArray jsonArray = jsonObject.getJSONArray("result");
			for (int i = 0; i < jsonArray.length(); i++) {
				JSONObject object = jsonArray.getJSONObject(i);
				if (object.get("name") != null) {
					System.out.println(object.get("name").toString());
					System.out.println(object.getString("name"));
				}
			}
		} catch (JSONException e) {
			e.printStackTrace();
		}
	}
}

Map,Bean -> JSON

fastjson

       使用 fastjson-x.x.xx.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:\n"+map);
		System.out.println("JSON:\n"+jsonMap);
		String str = jsonMap.toString();
		System.out.println("String:\n" + str);
	}
}

json-lib

       使用 json-lib-2.4.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);
		System.out.println("JSON:"+jsonMap);
		
		// 将Bean解析成JSON
		Student student = new Student("小红","18");
		JSONObject jsonBean = JSONObject.fromObject(student);
		System.out.println(jsonBean);// {"age":"18","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":18,"name":"小红"},"班级":"1班"}
	}
}
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐