zoukankan      html  css  js  c++  java
  • 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);
        }
    }

  • 相关阅读:
    vue-cli router的使用
    vue element new vue const
    mac terminal update management pack
    关于MAC升级后,vim更新插件报错
    flex入门----基础知识
    常用的flex知识 ,比起float position 好用不少
    npm 安装nodesass 或者包含nodesass的脚手架工具报错问题
    anglar cli的 rxjs_1.of is not a function
    npm node sass 安装报错
    axios ajax fetch 区别
  • 原文地址:https://www.cnblogs.com/laurarararararara/p/11801650.html
Copyright © 2011-2022 走看看