深⼊理解JSON数组、JSON对象、JSON字符串、普通数组的区别与操作整理深度理解JSON数组、JSON对象、JSON字符串、普通数组
⽬录
在这⾥⾸先提⼀下
JSON的数据格式:
1) 并列的数据之间⽤逗号(”, “)分隔。
2) 映射⽤冒号(”: “)表⽰。
3) 并列数据的集合(数组)⽤⽅括号(“[]“)表⽰。
4) 映射的集合(对象)⽤⼤括号(”{}”)表⽰。
5)JSON 数据的书写格式是:名称/值对。
6)名称/值对组合中的名称写在前⾯(在双引号中),值对写在后⾯(同样在双引号中),中间⽤冒号隔开:“firstName”:“John” JSON可以包含的值
1、数字(整数或浮点数)
2、字符串(在双引号中)
3、逻辑值(true 或 false)
4、数组(在⽅括号中)
5、对象(在花括号中)
6、null
JSON对象
JSON 对象在花括号中书写:
对象可以包含多个名称/值对:
{ “firstName”:“John” , “lastName”:“Doe” }
JSON数组
在这⾥我们将json数组分为前台获取处理和后台对其获取并处理,然后再对其转化形式进⾏讨论,⽐如JSON数组转换成JSON字符串等。JSON 数组在⽅括号中书写:
数组可包含多个对象:
{
“employees”: [
{ “firstName”:“John” , “lastName”:“Doe” },
{ “firstName”:“Anna” , “lastName”:“Smith” },
{ “firstName”:“Peter” , “lastName”:“Jones” }
]
}
前台处理JSON数据
在这⾥我们列举三个json数据:
var json={a:12,b:5,c:7};//普通的json对象数据
var arr=[12,5,7];//普通的数组
var jsonArray=[//josn数组
{"name":"zhang","password":"123"},
{"name":"yang","password":"456"}
];
alert(json['a']);
alert(arr[0]);
alert(jsonArray[0].name);
//对普通json对象的遍历
for(var i in json){
alert('第'+i+'个:'+json[i]);
}
//对数组的遍历
for(var i in arr){
alert('第'+i+'个:'+arr[i]);
}
//对json数组的遍历
for(var p in jsonArray){//遍历json数组时,这么写p为索引,0,1
alert(jsonArray[p].name +" "+ jsonArray[p].password);
}
// 或者
for(var i =0; i < jsonArray.length; i++){
alert(jsonArray[i].name +" "+ jsonArray[i].password);
}
//只有数组或者json数组才可以使⽤length⽅法。json对象使⽤length⽅法⽆效。
//如果json对象的⼦元素是数组或者json数组,也可以使⽤length⽅法。可以⽤于遍历数据
两者⼀对⽐就⼤致可以看出for in遍历对象是最适合了,如果⽤for的话,对象⾥⾯的k值和value值只好⽆能为⼒,那就只能⽤for in。如果只是普通的数组,⽤for最适合;那如果for in遍历普通数组话,他会⾃带length属性,到后⾯会报错,所以for in不适合循环遍历普通数组。
字符串和json对象和json对象数组相互转换
var jsonStr  ="{\"userId\":\"001\"}";// json对象字符串
var jsonArryStr ="[{\"userId\":\"001\"},{\"userId\":\"002\"}]";// json数组字符串
var jsonObj  =JSON.parse(jsonStr);// 字符串转为json对象
//var jsonObj = $.parseJSON(jsonStr)    //Jquery中的⽅法
var jsonArry =JSON.parse(jsonArryStr);// 字符串转为json数组
var jsonStr  =JSON.stringify(jsonObj);// json对象转为字符串
var last    = JSONString();//将JSON对象转化为JSON字符串
var jsonArryStr=JSON.stringify(jsonArry);// json数组转为字符串
alert(jsonStr);
alert(jsonArryStr);
alert(jsonObj.userId);
alert(jsonArry[0]['userId']);
//JSON.stringify(obj)      将JSON对象转为字符串。
//JSON.parse(string)      将字符串转为JSON对象格式。
/
/json对象转化成json数组对象
var arr1=[];
for(var i in jsonObj){
//var o={};
//o[i]=jsonObj[i];
arr1.push(jsonObj[i]);
}
//第⼆种⽅法
<script>
json值的类型有哪些//将对象转化为数组
let obj={'未完成':5,'已完成':8,'待确认':4,'已取消':6};
var arr =[];
for(let i in obj){
//arr.push(obj[i]); //属性
//arr.push(obj[i]); //值
var o={};
o[i]=obj[i];
arr.push(o);
}
function objToArray(array){
var arr =[];
for(var i in array){
var o={};
o[i]=array[i];
arr.push(o);
}
console.log(arr);
//return arr;
}
// console.log(arr)
objToArray(obj);
</script>
后台处理JSON数据
在这⾥我们使⽤的是阿⾥的fastjson
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.3</version>
</dependency>
我对应这相关的数据类型和知识点进⾏了⽐较详细的案例实施,具体代码如下:public static void main(String[] args){
//字符串转JSONObject
//字符串转JSONObject
String mapString ="{id:'211415034',name:'徐妍',age:'24'}";
JSONObject json = JSON.parseObject(mapString);//json={"id":"211415034","name":"徐妍","age":"24"}
//JSONObject转实体类
Student json_student = JavaObject(json, Student.class);
String name = String("name");
System.out.println("name+json------"+ name +"/n"+ json);
System.out.println("json_student---------"+ json_student);
//name+json------徐妍/n{"name":"徐妍","id":"211415034","age":"24"}
//json_student---------Student{id=211415034, name='徐妍', age='24'}
//json对象数组字符串(有⾥往外命名)
String homeworklist ="[{id:'211415034',name:'蛋蛋',age:'24'},{id:'211415034',name:'闲闲',age:'24'}]";
//对象数组字符串转JSONArray
JSONArray json_list = JSON.parseArray(homeworklist);
//对象数组字符串转List集合
List<Student> stu1 = JSON.parseArray(homeworklist, Student.class);
System.out.println("stu1----------"+ stu1);
//stu1----------[Student{id=211415034, name='蛋蛋', age='24'}, Student{id=211415034, name='闲闲', age='24'}]
System.out.println("json_list-------"+ json_list);
//json_list-------[{"name":"蛋蛋","id":"211415034","age":"24"},{"name":"闲闲","id":"211415034","age":"24"}]
//遍历JSONArray
for(Object stu : json_list){
System.out.println("stu2--------"+ stu);
}
//stu2--------{"name":"蛋蛋","id":"211415034","age":"24"}
//stu2--------{"name":"闲闲","id":"211415034","age":"24"}
//复杂的json字符串
String homeworkMap ="[{id:'211415034',name:'蛋蛋',age:'24'}, {id:'211415034',name:'闲闲',age:['24']}]";
//对象数组字符串转List集合
List<Student> json_map = JSON.parseArray(homeworkMap, Student.class);
System.out.println("json_map---------"+ json_map);
//json_map---------[Student{id=211415034, name='蛋蛋', age='24'}, Student{id=211415034, name='闲闲', age='["24"]'}]
//将List转换成JSONArray,要先转换成json字符串
JSONArray list1 = JSONArray.JSONString(json_map));
System.out.println("list1---------"+ list1);
//list1---------[{"name":"蛋蛋","id":211415034,"age":"24"},{"name":"闲闲","id":211415034,"age":"[\"24\"]"}]
//带名称的json数组对象字符串
String homeworkMap2 ="{data:[{id:'211415034',name:'蛋蛋',age:['24','12']}, {id:'211415034',name:'闲闲',age:['24','12']}],stud:{id:'211415034',name:'这是stud',age:'24'}}";
//先将json字符串转化成JSONObject
JSONObject json_hp = JSON.parseObject(homeworkMap2);
System.out.println("json_hp--------------"+ json_hp);
//json_hp--------------{"data":[{"name":"蛋蛋","id":"211415034","age":["24","12"]},{"name":"闲闲","id":"211415034","age":["24","12"]}],"stud":{"name":"这是stud","id":"211415034","age":"24"}}
/
/获取key为data的数组
System.out.println("data--------------"+ ("data"));
//data--------------[{"name":"蛋蛋","id":"211415034","age":["24","12"]},{"name":"闲闲","id":"211415034","age":["24","12"]}]
//获取key为data数组的stud对象
System.out.println("stud--------------"+ ("stud"));
//stud--------------{"name":"这是stud","id":"211415034","age":"24"}
//强转 List<Map<String,Object>> list= (List<Map<String, Object>>) json_hp;
List<Map<String, Object>> list =(List<Map<String, Object>>) ("data");
System.out.println("list------------"+ list);
//list------------[{"name":"蛋蛋","id":"211415034","age":["24","12"]},{"name":"闲闲","id":"211415034","age":["24","12"]}]
//遍历list
for(Map<String, Object> map : list){
System.out.println("map-----"+ map);
System.out.println("map-----"+ map);
List age1 =(List) ("age");
String age = String.valueOf(age1);
for(Object age2 : age1){
System.out.println("age2-----------"+ age2);
}
System.out.println("age-----------"+ age);
}
/
*
map-----{"name":"蛋蛋","id":"211415034","age":["24","12"]}
age2-----------24
age2-----------12
age-----------["24","12"]
map-----{"name":"闲闲","id":"211415034","age":["24","12"]}
age2-----------24
age2-----------12
age-----------["24","12"]*/
}
json的分析就先到这⾥,后台的接收再SpringMVC中是⽤requestBody来进⾏的,可以在AJAX前天台
传值的时候转成json字符串的形式,就和我后台举的例⼦是相同的了。如有其他错误的地⽅还请多多指正。
码字不易,记得收藏,点赞、评论

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。