JSON數據類型,Java對象轉JSON

Json

  • 概念
    • JavaScript對象表示法 JavaScript Object Notation
      • var p = {“name”:“張三”,“age”:23,“gender”:“男”};
      • Json 多用於存儲和交換文本信息的語法
      • 用於傳輸數據
      • 相較於XML,JSON比之更小,傳輸速度更快,且更易解析
    • 語法
      1. 基本規則

        • 數據在名稱/值對中 :Json數據是由鍵值對構成的

          • 鍵用引號(單引號或雙引號都可)引起來,也可以不使用引號
          • 值可以是
            1. 數字(整數或浮點數)
            2. 字符串(在雙引號中)
            3. 邏輯值(true 或 false)
            4. 數組(在方括號中){“persons”:[{},{}…]}
            5. 對象(在花括號中){“address”:{“provice”:“陝西”,…}}
            6. null
        • 數據由逗號分隔 :多個鍵值對之間由逗號分隔

        • 花括號保存對象 :使用{}定義Json格式

        • 方括號保存數組 :[]

      2. 獲取數據

        • json對象.鍵名
        • json對象[“鍵名”]
        • 數組對象[索引]
    <script>
            // 1.定義基本格式
            var person = {"name":"tom",age:23,'gender':true};
            // alert(person);
            // 基本格式的獲取
            // var age = person.age;
            var age = person["age"];
    
            //遍歷json對象數據
            for (var key in person){
                //默認key是字符串格式,所以不能使用person.key獲取值,只能使用person[key]獲取
                // alert(key+":"+person.key);
                // alert(key+":"+person[key]);
            }
    
            // alert(age);
    
            // 2.定義嵌套格式
            var persons = {"persons":[
                            {"name":"zhangsan","age":23,"gender":"man"},
                            {"name":"lisi","age":24,"gender":"woman"}]
            };
            // alert(persons);
    
            // 數組格式json對象數據的獲取
            var gender = persons.persons[1].gender;
            // alert(gender);
    
            // 3.定義嵌套格式(數組中存放了多個對象)
            var ps = [{"name":"zhangsan","age":23,"gender":"man"},
                {"name":"lisi","age":24,"gender":"woman"}];
            // alert(ps);
    
            var name = ps[0].name;
            // alert(name);
    
            //數組內容的遍歷 需要雙重循環
            for (var i = 0; i < ps.length; i++) {
                var p = ps[i];
    
                for (var key in p){
                    alert(key+":"+p[key]);
                }
    
            }
        </script>

JSON數據與Java對象的相互轉換

要想完成轉換,一般需要使用JSON解析器;常見的解析器有:Jsonlib,Gson,fastjson,jackson由於jackson解析器是流行框架中內置的JSON解析器,所以先學習jackson

  • JSON轉爲Java對象(瞭解)
    使用步驟與Java轉換爲JSON相類似
    • 導入jackson相關jar包
    • 創建jackson核心對象ObjectMapper
    • 調用ObjectMapper的相關方法進行轉換
      轉換方法是readValue(json數據,Class類型)
    public void JsonToJava() throws IOException {
        // 準備一個json數據
        String json = "{\"gender\":\"男\",\"name\":\"張三\",\"age\":23}";

        // 創建objectMapper對象
        ObjectMapper mapper = new ObjectMapper();

        // 調用方法轉換爲Java對象
        Person person = mapper.readValue(json, Person.class);

        // 打印轉換的Java對象
        // Person{name='張三', age=23, gender='男', birthday=null}
        System.out.println(person);
    }
  • Java對象轉爲JSON
    使用步驟
    • 導入jackson相關jar包
    • 創建jackson核心對象ObjectMapper
    • 調用ObjectMapper的相關方法進行轉換
      轉換方法:
      * writeValue(參數1,obj) :
      參數1:
      File :將obj對象轉換爲JSON字符串,並保存到指定的文件中
      Writer :將obj對象轉換爲JSON字符串,並將json數據填充到字符輸出流中
      OutputStream :將obj對象轉換爲JSON字符串,並將json數據填充到字節輸出流中
      * writeValueAsString(obj) :將對象直接轉爲json字符串並返回
    //Java對象轉爲JSON字符串
    @Test
    public void javaToJson() throws IOException {
        // 1.創建Person對象
        Person person = new Person();
        person.setName("張三");
        person.setAge(23);
        person.setGender("男");

        // 2.創建Jackson核心對象ObjectMapper
        ObjectMapper mapper = new ObjectMapper();

        // 3.轉換
        /*
            轉換方法:
                writeValue(參數1,obj)    :
                    參數1:
                        File    :將obj對象轉換爲JSON字符串,並保存到指定的文件中
                        Writer  :將obj對象轉換爲JSON字符串,並將json數據填充到字符輸出流中
                        OutputStream    :將obj對象轉換爲JSON字符串,並將json數據填充到字節輸出流中
                writeValueAsString(obj)    :將對象直接轉爲json字符串並返回
         */
        //String json = mapper.writeValueAsString(person);

        // {"name":"張三","age":23,"gender":"男"}
        //System.out.println(json);
        // 將json數據保存在d盤下的a.txt文件中
        mapper.writeValue(new File("d://a.txt"),person);
    }
      註解
           1. @JsonIgnore:排除屬性
           2. @JsonFormat:屬性值得到格式化
   * 爲待轉換的person對象中添加Data屬性,然後重新做Json轉換
           直接打印轉換的結果爲  
           {"name":"李四","age":31,"gender":"男","birthday":1571018034025}
       可以發現birthday的值並不是想要的結果,可以有兩種做法

        1.忽略該屬性,不將該屬性轉換爲json數據   :
           在person對象的該屬性值前加註解  @JsonIgnore
           此時轉換的結果爲    
           {"name":"李四","age":31,"gender":"男"}
        2.設置一下該屬性的格式   :
           在person對象的該屬性值前加註解  @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
           此時的轉換結果爲    
           {"name":"李四","age":31,"gender":"男","birthday":"2019-10-14 02:10:14"}

       複雜的java對象轉換
           1. List轉換爲Json  :轉換的是數組形式[{},{},...]
           2. Map轉換爲Json   :轉換結果與person對像轉換的類似{鍵值對}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章