关于前后台数据交换的JSON数据格式

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;

/**

  • Json字符串分别与javaBean及List集合的互转,以及区分
  • @ClassName JsonTest
  • @Description
  • @author 桑伟东
  • @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());

      /**

      • 通过以上语句打印出来的结果如下,这个里面是两个student对象, 如果你看到这样的数据,应该用JSONArray解析,解析方式如下
      • [{"age":23,"hobby":[1,2,3],"name":"桑伟东"},{"age":22,"hobby":[2,3],
      • "name":"薛彭元"}] */

      // 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());
      // 打印结果如下
      /**

      • [{"age":23,"hobby":[1,2,3],"name":"桑伟东"},{"age":22,"hobby":[2,3],
      • "name":"薛彭元"}] */ // 6.将JSONArray对象,重新还原成List集合

      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());
      /**

      • [Student [name=桑伟东, age=23, hobby=[1, 2, 3]], Student [name=薛彭元,
      • age=22, hobby=[2, 3]]] */

    }

    /**

    • 该方法是将前台或页面获得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());
      /**

      • {"age":23,"hobby":[1,2,3],"name":"桑伟东"} */

      // 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());
      /**

      • Student [name=桑伟东, age=23, hobby=[1, 2, 3]] */

    }

}