JSON
Posted xue_yun_xiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSON相关的知识,希望对你有一定的参考价值。
一、概述
json 是一种轻量级的数据交换格式,解决的是前端和后端的数据交互易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
二、语法
[ ] 表示数组
{ } 表示对象
" " 表示是属性名或字符串类型的值
: 表示属性和值之间的间隔符
, 表示多个属性的间隔符或者是多个元素的间隔符
json 其实描述的是 对象,有属性,对应的属性值
属性:属性值 键值对
“属性”:“字符串”
“属性”:数字
“属性”:布尔值
属性值必须使用“”,引用,属性于属性值之间使用:隔开,属性值如果是字符串,用引号,如果是数值/布尔,直接写
键值对 于 键值对 之间使用 , 分割
多个键值对(属性) 组成对象,使用 { }包裹
多个对象 使用,分割,使用[] 包裹组成 是数组
json 对象
{
"id": 88,
"name": "xiaoqiang",
"age": 18,
"sex": "女"
}
json数组
[{
"id": 88,
"name ": "xiaoqiang",
"age": 18,
"sex": "女"
},
{
"id": 77,
"name ": "zhansan",
"age": 18,
"sex": "女"
}
]
复合json对象
{
"status": 1,
"message": "success",
"data": [{
"id": 88,
"name ": "xiaoqiang",
"age": 18,
"sex": "女"
},
{
"id": 77,
"name ": "zhansan",
"age": 18,
"sex": "女"
}
]
}
三、在java 中json 和对象的相互转换
FastJson
FastJson 来自阿里,最快的json,有安全问题
Jackson解析
是springmvc 自带JackSon 解析
GJson
来自于谷歌公司
导包:
FastJson
package com.qfedu.json;
import com.alibaba.fastjson.JSON;
import com.qfedu.entity.Student;
import java.util.List;
public class FastJsonTest {
public static void main(String[] args) {
String strJson = "{\\"id\\":88,\\"name\\":\\"xiaoqiang\\",\\"age\\":18,\\"sex\\":\\"女\\"}";
//将json字符串转换为对象
Student student = JSON.parseObject(strJson, Student.class);
System.out.println("student:" + student);
//将对象转换为json
System.out.println(JSON.toJSONString(student));
//将json数组转换为java集合
String listJson = "[{\\"id\\":88,\\"name\\":\\"xiaoqiang \\",\\"age\\":18,\\"sex\\":\\"女\\"},{\\"id\\":77,\\"name \\":\\"zhansan\\",\\"age\\":18,\\"sex\\":\\"女\\"}]";
List<Student> studentList = JSON.parseArray(listJson, Student.class);
for (Student student1 : studentList) {
System.out.println(student1);
}
//将java集合转换为json数组
System.out.println(JSON.toJSONString(studentList));
}
}
Jackson
package com.qfedu.json;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.qfedu.entity.Student;
import com.fasterxml.jackson.core.type.TypeReference;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class JacksonTest {
public static void main(String[] args) throws IOException {
String strJson = "{\\"id\\":88,\\"name\\":\\"xiaoqiang\\",\\"age\\":18,\\"sex\\":\\"女\\"}";
//将json转为对象
ObjectMapper objectMapper = new ObjectMapper();
Student student = objectMapper.readValue(strJson, Student.class);
System.out.println(student);
System.out.println("**********");
//对象转为json
System.out.println(objectMapper.writeValueAsString(student));
System.out.println("**********");
//将json数组转为集合
String listJson = "[{\\"id\\":88,\\"name\\":\\"xiaoqiang\\",\\"age\\":18,\\"sex\\":\\"女\\"},{\\"id\\":77,\\"name\\":\\"zhansan\\",\\"age\\":18,\\"sex\\":\\"女\\"}]";
List<Student> studentList = objectMapper.readValue(listJson, new TypeReference<ArrayList<Student>>() {
});
for (Student student1 : studentList) {
System.out.println(student1);
}
System.out.println("**********");
//将集合转为json
System.out.println(objectMapper.writeValueAsString(studentList));
}
}
四、在js中 js对象和 json 对象转换
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
// js 字符串
var str = "{\\"id\\":88,\\"name\\":\\"xiaoqiang \\",\\"age\\":18,\\"sex\\":\\"女\\"}";
// 将 str ----> js 对象
var student = JSON.parse(str);
alert("student.name:"+student.name);
// js对象 ----》json
alert("student---str:"+JSON.stringify(student));
// json数组
var listJson = "[{\\"id\\":88,\\"name\\":\\"xiaoqiang \\",\\"age\\":18,\\"sex\\":\\"女\\"},{\\"id\\":18,\\"name\\":\\"杨涛 \\",\\"age\\":18,\\"sex\\":\\"女\\"}]";
// json数组 --->js 对象数组
var studentList = JSON.parse(listJson);
for (var i=0;i<studentList.length;i++){
alert("item:"+studentList[i].name)
}
// js 对象数组 --->str
alert("studentList--->json:"+JSON.stringify(studentList))
</script>
</body>
</html>
以上是关于JSON的主要内容,如果未能解决你的问题,请参考以下文章
json 可视代码工作室Angular with Firebase片段
错误代码:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象和允许未设置片段的选项开头。”