目录
JSON数据简介
1.什么是JSON数据
JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式:键:值格式。
JSON 使用完全独立于语言的文本格式,这使得 JSON 成为理想的数据交换语言。 它易于人类阅读和编写,也易于机器解析和生成。
2.JSON字符串
JSON字符串是JSON格式的字符串,也就是说,JSON字符串也是字符串类型,但是这些字符串是有格式的,也就是类似于map[key:value]的格式。
3.后端JSONObject对象
JSONObject是一种数据结构javascript 字符串转对象,可以理解为JSON格式的数据结构(键值结构),类似于map,可以使用put方法向JSONObject对象添加元素。 JSONObject可以轻松转换为字符串javascript 字符串转对象,其他对象也可以轻松转换为JSONObject对象。
(1)原生生成JSONObject
JSONObject zhangsan = new JSONObject();
try {
//添加
zhangsan.put("name", "张三");
zhangsan.put("age", 18.4);
zhangsan.put("birthday", "1900-20-03");
zhangsan.put("majar", new String[] {"哈哈","嘿嘿"});
zhangsan.put("null", null);
zhangsan.put("house", false);
System.out.println(zhangsan.toString());
} catch (JSONException e) {
e.printStackTrace();
}
(2)通过HashMap数据结构生成
HashMap zhangsan = new HashMap();
zhangsan.put("name", "张三");
zhangsan.put("age", 18.4);
zhangsan.put("birthday", "1900-20-03");
zhangsan.put("majar", new String[] {"哈哈","嘿嘿"});
zhangsan.put("null", null);
zhangsan.put("house", false);
System.out.println(new JSONObject(zhangsan).toString());
(3)由JavaBean生成
Student student = new Student();
student.setId(1);
student.setAge("20");
student.setName("张三");
// 生成 JSONObject
System.out.println(JSON.toJSON(student));
(4) JSON字符串与JSONObject转换
String studentString = "{"id":1,"age":2,"name":"zhang"}";
//JSON字符串转换成 JSONObject
JSONObject jsonObject1 = JSONObject.parseObject(stuString);
System.out.println(jsonObject1);
4.前端JSON字符串和Javascript对象的比较
5. 基本结构
JSON的两种结构:
(1)名称/值对的集合(Acollectionofname/valuepairs)。 在不同的语言中,它被理解为对象(object)、记录(record)、结构体(struct)、字典(dictionary)、哈希表(hashtable)、键控列表(keyedlist)或关联字段(关联数组)。
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }
(2)有序值列表(Anorderedlistofvalues)。 在大多数语言中,它被理解为字段(数组)。
{ "people": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"},
{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }
]}
5. JSON格式的应用
(1) 将JSON数据参数化为变量
例如,您可以创建一个新的 Javascript 变量,然后将 JSON 格式的数据字符串直接传递给它:
var 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" }
] }
(2) 访问数据
将上述字段放入Javascript变量后,就可以轻松访问它了。 事实上,只需使用点表示法来访问链接列表元素。因此,要访问程序员列表中第一个条目的姓氏,只需在 JavaScript 中使用以下内容
代码:
people.programmers[0].lastName;
(3) 更改JSON数据
正如可以通过点和括号访问数据一样,可以根据相同的形式轻松更改数据
people.musicians[1].lastName = "Rachmaninov";
(4) 转换字符串
可以将任何 JSONObject 和 Javascript 对象转换为 JSON 文本,反之亦然。
1.后端将Java对象和JSONObject转换为JSON字符串格式
1.杰克逊级
(1)Maven引入依赖
com.fasterxml.jackson.core
jackson-databind
2.9.9
com.fasterxml.jackson.core
jackson-core
2.9.9
com.fasterxml.jackson.core
jackson-annotations
2.9.9
(2) 泛型函数的使用
@RequestMapping(value="/returnJson")
//@ResponseBody注解将JSON数据写入响应流中返回到前端
@ResponseBody
public String returnJson(){
ObjectMapper objectMapper=new ObjectMapper();
Student student=new Student();
//writeValueAsString()函数将对象转换为JSON字符串
return objectMapper.writeValueAsString(student);
}
2.FastJson解释器
(1)Maven引入依赖
com.alibaba
fastjson
1.2.4
(2) 泛型函数的使用
// 将 JSON 字符串反序列化成 JavaBean
public static final Object parse(String text);
// 将 JSON 字符串反序列化成 JSONObject
public static final JSONObject parseObject(String text);
// 将 JSON 字符串反序列化成 JavaBean 或 JSONObject
public static final T parseObject(String text, Class clazz);
// 将 JSON 字符串反序列化成JSONObject 的数组
public static final JSONArray parseArray(String text);
// 将 JSON 字符串反序列化成 JavaBean 的数组
public static final List parseArray(String text, Class clazz);
// 将 Java 对象序列化为JSON 字符串
public static final String toJSONString(Object object);
// 将 Java 对象序列化为带格式的 JSON 字符串
public static final String toJSONString(Object object, boolean prettyFORMat);
//将 JavaBean 转换为 JSONObject 或者 JSONArray。
public static final Object toJSON(Object javaObject);
parse()和parseObject()在反序列化中的区别在于:parse()会识别并调用目标类的setter技术; parseObject() 需要执行 JSON.toJSON(obj ),即将 JavaBean 转换为 JSONObject,因此处理过程中会调用反序列化目标类的 getter 方法将参数参数传递给 JSONObject。
3.使用@RestController注解
@RestController是@ResponseBody和@Controller的组合注解。
@RequestMapping(value="/returnJson")
@ResponseBody
public Student returnJson(){
Student student=new Student();
student.setName("林俊杰");
student.setBirth(new Date(1996-03-15));
student.setPassword("123456");
String[] lan= {"Java","python"};
student.setLanguage(lan);
return student;
}
2.前端Javascript对象与JSON字符串格式的转换
1.使用JSON库
(1)Javascript对象与json字符串转换
var jsonVar = {key: value}
//将JS对象转换为JSON字符串
var jsonString = JSON.stringify(jsonVar)
//将JSON字符串转换为JSON对象
var jsonObject = JSON.parse(jsonString)
(2)Javascript字段与json字符串转换
var jsonVar = [value1,..,value]
//将JS数组转换为JSON字符串
var jsonString = JSON.stringify(jsonVar)
//将JSON字符串转换为数组对象
var jsonObject = JSON.parse(jsonString)
2.Javascript的内置方法
Javascript自带的eval()函数可以将json数据转换为Javascript对象。
var json = '{"name":"James"}';
var obj = eval( '(' + json + ')' ); //注意需要在json字符外包裹一对小括号
alert( obj.name );
3.jQuery的内置方法
$.parseJSON(json) 可以在 Jquery 中使用,将 json 转换为 Javascript 对象。
var json = '{"name":"James"}';
var obj = $.parseJSON(json);
alert( obj.name );
4.使用jquery.json插件
该插件提供了4个用于解析和反解析json的函数,如下:
var obj = {"plugin":"jquery-json","version":2.4};
//json = '{"plugin":"jquery-json","version":2.4}'
var json = $.toJSON( obj );
// 得到name值为:"jquery-json"
var name = $.evalJSON( json ).plugin;
// 得到version值为:2.4
var version = $.evalJSON( json ).version;
总结
以上是个人经验,希望能给大家一个参考,也希望大家多多支持编程网。