1.前后台数据格式是不是很多时候实用JSON格式,那么此时的JSON是指的JSON对象还是JSON字符串呢?
2.JSONArray和JSONObject以及JSON数组、JSON对象都分别是怎么区分,能不能举个例子?用简单的话解释一下这些区别
http请求数据层面获取到的是String字符串,然后通过JSON.parseObject(string)转换成JSONObject格式,然后从里面通过字段名取值。
JSONArray获取到的是一个数组,然后你通过for循环遍历,取到值后在进行一次JSONObject 转换,最终取到你想要的值,你说的这些概念性的问题可以参考人家的文档
js对象 和后台具体语言的对象之间用字符串交流,只是字符串的格式是{key:value},这样前台解析,后台解析都能得到符合这种语言的对象,从而进行操作。
反正你前台传到后台的是字符串,后台传到前台的也是字符串。
你应该用的java后台语言。对于第二问,其实就是针对java的类型,进行java对象变字符各种方便操作。比如对java数组,集合,单独的对象转成json字符串
交换数据的都是对象,从页面传值给后台的时候jsonArray就是json数组。获取获取json对象你也可以用一个类去对应这个对象里的key,然后获取每个值。后台响应数据给页面发送的是一个对象就行,具体的是不是框架会不会封装成json对象也不是很清楚。
从前台拿到的一般都是json字符串,怎样区分,可以打印看字符串格式就知道
//JSONArray对象的打印结果如下
[{"age":23,"hobby":[1,2,3],"name":"桑伟东"},{"age":22,"hobby":[2,3], "name":"薛彭元"}]
//JSONObject的打印结果如下
{"age":23,"hobby":[1,2,3],"name":"桑伟东"}
可以明显的看出这两数据结构是有区别的,JSONArray的打印结果中有“[ ]”,如果看到这个,当然应该按照JSONArray,进行相应的操作,否则按JSONObject操作
具体的代码如下,再解析之前,切记导入相应的jar包,该导入的java有如下这些
参考代码如下,第一个类是为了创造相应数据方便而创建的一个JavaBean
package com.ilike.redis.test;
import java.util.Arrays;
public class Student {
private String name;
private Integer age;
private Integer [] hobby;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer[] getHobby() {
return hobby;
}
public void setHobby(Integer[] hobby) {
this.hobby = hobby;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", hobby="
+ Arrays.toString(hobby) + "]";
}
}
package com.ilike.redis.test;
import java.util.ArrayList;
import java.util.List;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.junit.Test;
/**
@date 2017-10-21 下午4:44:31
*/
public class JsonTest {
/**
该方法是将前台或页面获得json字符串转成相应的List集合
*/
@Test
public void test_jsonToArray() {
// 1.创建学生对象,并设置参数
Student student1 = new Student();
student1.setName("桑伟东");
student1.setAge(23);
Integer[] hobby1 = { 1, 2, 3 };
student1.setHobby(hobby1);
Student student2 = new Student();
student2.setName("薛彭元");
student2.setAge(22);
Integer[] hobby2 = { 2, 3 };
student2.setHobby(hobby2);
// 2.将学生对象添加到List集合
List stuList = new ArrayList();
stuList.add(student1);
stuList.add(student2);
// 3.将list集合装成JSONArray对象,并打印
JSONArray jsonArray = JSONArray.fromObject(stuList);
// System.out.println(jsonArray.toString());
/**
// 4.将json字符串转成JSONArray(相当于把页面或前台拿到的json字符串转成JSONArray对象)
String jsonString = "[{'age':23,'hobby':[1,2,3],'name':'桑伟东'},{'age':22,'hobby':[2,3],'name':'薛彭元'}]";
// 5.将上面的字符串重新还原成JSONArray对象
JSONArray jsonArray2 = JSONArray.fromObject(jsonString);
// System.out.println(jsonArray2.toString());
// 打印结果如下
/**
List list = new ArrayList();
for (int i = 0; i < jsonArray2.size(); i++) {
Object object = JSONObject.toBean((JSONObject) jsonArray.get(i),
Student.class);
list.add(object);
}
// 7.打印还原好的List集合,结果打印如下
System.out.println(list.toString());
/**
}
/**
该方法是将前台或页面获得json字符串转成相应的JavaBean
*/
@Test
public void test_jsonToJavaBean() {
// 1.创建一个student对象,并设置数据
Student student = new Student();
student.setName("桑伟东");
student.setAge(23);
Integer[] hobby = { 1, 2, 3 };
student.setHobby(hobby);
// 2.将java对象转成JSONObject,打印结果如下
JSONObject jsonObject = JSONObject.fromObject(student);
System.out.println(jsonObject.toString());
/**
// 3.将该字符串转成相应的javaBean(相当于把从前台拿到的json字符串转成javaBean)
String jsonString = "{'age':23,'hobby':[1,2,3],'name':'桑伟东'}";
// 4.先将字符串再还原成JSONObject对象
JSONObject jsonObject2 = JSONObject.fromObject(jsonString);
// 5.将JSONObject对象还原成相应的javaBean ,打印结果如下
Student student2 = (Student) JSONObject.toBean(jsonObject2,
Student.class);
System.out.println(student2.toString());
/**
}
}