Json字符串

任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型。
对象:对象在 JS 中是使用花括号包裹 {} 起来的内容,数据结构为 {key1:value1, key2:value2, ...} 的键值对结构。在面向对象的语言中,key 为对象的属性,value 为对应的值。键名可以使用整数和字符串来表示。值的类型可以是任意类型。
数组:数组在 JS 中是方括号 [] 包裹起来的内容,数据结构为 ["java", "javascript", "vb", ...] 的索引结构。在 JS 中,数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是索引使用得多。同样,值的类型可以是任意类型。

Json字符串里面的是一个对象,如果是多个对象,则用逗号间隔,即{},{},这样就组成了一个对象序列,为了辨别开始和结束,则需要加上[]才能进行传递,则实际传递的形式应该是[{},{}],如果只要传递一个对象,则{}的形式就可以了。接下来就是对象属性的表现方式了,属性必须在""   
里面,属性与值之间用:隔开,属性之间用,来分隔,如果属性的值为数组,则用[]包括起来,这样实际传递的数据格式可能有:1、{"属性1":值1,"属性2":值2},如果值为字符串,则也需要用""括起来(下同)。2、{"属性1":值1,"属性2":[值1,值2]},其中属性2是一个数组,包含
了值1和值2。3、{"属性1":值1,"属性2":{"属性a":值a,"属性b":[值b,值c]}},这个比较复杂了,属性2是个对象,这个对象由包含属性a和属性b,属性b又是一个数组包含值b和值c。我想这些应该是最基本了,其余的就是在此基础上的拓展而已。

实例:

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;

class Student {
    private String name;
    private int age;
    private String sex;
    public Student(String name, int age, String sex) {

        this.name = name;
        this.age = age;
        this.sex = sex;
    }
}
/**
 * 介绍以下Json字符串   数据的序列化
 * Student stu = new Student("sss", 20, "male");
 * Json格式的数据:  {"name":"sss", "age":20, "sex":"male"}
 * @Author huiman
 */

public class MyJson {
    /**
     * 获取所有的属性:getField
     * 把对象序列化成Json字符串
     * cls 类型的Class对象
     * @param <T>
     * @return
     */
    public static <T> String toJson(T obj, Class<T> cls) throws Exception {
        StringBuilder sb = new StringBuilder();
        sb.append("{");
        Field[] fields = cls.getDeclaredFields();//获取所有属性存入数组
        //异常放在循环外
        try {
            for (int i = 0; i < fields.length; i++) {
                String name = fields[i].getName(); //获取成员变量的名字
                Field f2 = cls.getDeclaredField(name); //获取每一个属性
                f2.setAccessible(true);
                Object value = f2.get(obj); //get方法获得属性的值,注意参数,获取的是对象
                String str = name + ":" + value + ",";
                sb.append(str);//获取名字与值后用{括起来
            }
        }
         catch (Exception e) {
        }
        /**将index号元素的值改为ch
         * public void setCharAt(int index, char ch) {
        //        if ((index < 0) || (index >= count))
        //            throw new StringIndexOutOfBoundsException(index);
        //        value[index] = ch;
            }
        */
        sb.setCharAt(sb.length()-1,'}');//setCharAt方法将最后一个改为"}"
        return sb.toString();//返回sb字符串
   }

    public static void main(String[] args) throws Exception {
        //将创建的Student对象存入数组
       Student[] students=new Student[3];//创建几个对象就要给对象赋值
       students[0]=new Student("sss", 20, "male");
       students[1]=new Student("mmm",10,"female");
       students[2]=new Student("aaa",30,"female");
       StringBuilder sb=new StringBuilder();
       sb.append("[");
       for(int i=0;i<students.length;i++){
           //将方法中产生的对象拼接起来
           sb.append(MyJson.toJson(students[i], Student.class));
           //对象之间用,隔开
           sb.append(",");
        }
        sb.setCharAt(sb.length()-1,']');
        System.out.println(sb);
    }
}

 

 

 

posted @ 2019-11-05 21:10  acehm  阅读(639)  评论(0编辑  收藏  举报