zoukankan      html  css  js  c++  java
  • 关于JSON

    一.JSON 描述。

        JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

    二.语法规则。

       1. JSON是由‘名称/值’对组成的集合,’名称/值‘格式例如,“key1”:value1。

       2.JSON的值(value) 可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。

       3.JSON有两种结构,一种是对象,另一种是数组。

          (1).对象(object),是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)     分  隔。 是由{}括起来的,格式例如,{"key1":value1,"key2":value2,"key3":value3,...}。

          (2).数组(array) ,是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔,是由[]括起来的。格式例如,[{"key1":value1,"key2":value2,"key3":value3},{"key1":value1,"key2":value2,"key3":value3}...]。

    三.功能

    1 JSON格式化校验
    很多人在得到JSON数据后,一时没有办法判断JSON数据格式是否正确,是否少或多符号而导致程序不能解析,这个功能正好能帮助大家来完成JSON格式的校验。
    2 JSON视图
    想必很多程序员都会遇到当找一个节点的时候,会发现如果直接对着一行行数据无从下手,就算知道哪个位置,还要一个节点一个节点的往下找,万一一不留神又得从头开始找的麻烦事。
    有了这个功能,一切JSON数据都会变成视图格式,一目了然,什么对象下有多少数组,一个数组下有多少对象。
    这个功能非常实用。不光有视图功能还有格式化、压缩、转义、校验功能。总之很强大。
    3 压缩转义
    程序员在写JSON语句测试用例的时候,很多时候为了方便直接写了个JSON字符串做测试,但是又陷入了无止境的双引号转义的麻烦中。这款功能集压缩、转义于一身,让你在写测试用例的时候,如鱼得水。
    4 JSON在线编辑器
    如果你现在的电脑刚巧没有装你所熟悉的编辑器,如果你想针对拿到的JSON数据的某个节点做数据修改时,这个功能可以满足你的需求。
    5 在线发送JSON数据
    大家都知道,JSON用的最多的还是web项目的开发,那你要测试一个接口是否能准确的接受JSON数据,那你就得写一个页面发送JSON字符串,重复的做着这件事。随着这个功能的横空出世,你可以摆脱写测试页面了,因为这个功能可以将指定的JSON数据发送指定的url,方便吧。
    6 JSON着色
    很多人在写文档时,总希望文档能一目了然,但是面对着白底黑字的JSON数据总是提不起精神没关系,使用这个功能,所有的关键字都 [3]  会被着色,数据结构一目了然。
    7 JSON-XML互转
    顾名思义,将JSON格式的数据转化成XML [3]  格式、或者XML格式的数据转化成JSON格式,一切都不是问题。
    8 JSON-VIEW
    JSON查看实用工具,在开发过程中(windows平台中)可以对JSON数据进行格式化和视图显示。
    9 它和xml一样都是一种数据交换格式

     四、JSON在web项目中的使用

     1.jquery的ajax方式传递json到后台

     (1).示例一:

    $.ajax({
    type:"POST",
    url:"sysAllTableAction_saveTable.do",
    data:{jsonStr: JSON.stringify(array_json)},
    dataType:"text json",
    headers:{
    Accept:"application/json",
    "Content-Type":"application/json"
    },
    cache:false,
    success:function(msg){
    alert(msg);
    },
    error:function(){
    alert("error");
    }
    });

    (2).示例二:

    var form_vals = $('#form1').serializeArray();
    $.post("PmpAction_toUpdate.do",form_vals,function(data){
    if(data=="success"){
    alert("修改成功!");
    window.location.href="PmpAction_List.do";
    }
    });

    2.JSON数据的转换

    (1).将表单内容序列化,转为JSON

    var t="{'firstName': 'cyra', 'lastName': 'richardson', 'address': {'streetAddress': '1 Microsoft way', 'city': 'Redmond'},
    'phoneNumbers': ['425-777-7777','206-777-7777']}";
    var jsonobj=eval('('+t+')');
    alert(jsonobj.firstName);
    alert(jsonobj.lastName);

    3.JSON数据在页面中的解析.

    五.JSON解析。   

    1. 新建测试项目。

        实体类

    public class Person {
    private int id;
    private String name;
    private int age;
    public int getId() {
    return id;
    }
    public void setId(int id) {
    this.id = id;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public int getAge() {
    return age;
    }
    public void setAge(int age) {
    this.age = age;
    }
    @Override
    public String toString() {
    return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
    }
    }

    使用GSON和JackJson分别解析。

      2. GSON。GSON是Google开发的Java API,用于转换Java对象和Json对象。

      2.1.  首先下载导入GSON的jar。

          (1).可以去github的链接,下载GSON的源码,自己编译,生成jar;

          (2).也可以直接下载jar包,GSONjar包下载链接。

          (3).gson-2.6.6.jar 下载链接。

       2.2.生成对象。

    public static void main(String[] args) {
    Gson gson=new Gson();
    Person person=new Person();
    person.setId(1);
    person.setName("zhangsan");
    person.setAge(30);
    String str=gson.toJson(person);
    System.out.println(str);
    }

      2.3.输出结果。

      {"id":1,"name":"zhangsan","age":30}  

      2.4.生成数组。

    public static void main(String[] args) {
    List<Person> list=new ArrayList<Person>();
            Gson gson=new Gson();
            Person person=new Person();
            person.setId(1);
            person.setName("zhangsan");
            person.setAge(30);
            list.add(person);
            Person person1=new Person();
            person1.setId(2);
            person1.setName("lisi");
            person1.setAge(20);
            list.add(person1);
            String str=gson.toJson(list);
            System.out.println(str);
    }

      2.5.输出结果。

    [{"id":1,"name":"zhangsan","age":30},{"id":2,"name":"lisi","age":20}]  

      2.6.json解析对象。

    public static void main(String[] args) {
    String str="{"id":1,"name":"zhangsan","age":30}";
    Gson gson=new Gson();
    Person person=gson.fromJson(str, Person.class);
    System.out.println(person.toString());
    }

      2.7.输出结果。

      Person [id=1, name=zhangsan, age=30]  

      2.8.json解析数组。 

    public static void main(String[] args) {
    String str = "[{"id":1,"name":"zhangsan","age":30},{"id":2,"name":"lisi","age":20}]";
    Gson gson = new Gson();
    Type type = new TypeToken<List<Person>>() {
    }.getType();
    List<Person> list = gson.fromJson(str, type);
    for (Person person : list) {
    System.out.println(person.toString());
    }
    }

      2.9.输出结果。

    Person [id=1, name=zhangsan, age=30]  

    Person [id=2, name=lisi, age=20]  

     3.JackJson。

       Jackson框架是基于Java平台的一套数据处理工具,被称为“最好的Java Json解析器”。 
       Jackson框架包含了3个核心库:streaming,databind,annotations。

     3.1 库下载地址

      Jackson https://github.com/FasterXML/jackson-core/wiki

       Databind https://github.com/FasterXML/jackson-databind

       Annotations https://github.com/FasterXML/jackson-annotations/wiki

      Jackson doc https://github.com/FasterXML/jackson-docs

      3.2.生成对象。

    Person person=new Person();
    person.setId(1);
    person.setName("zhangsan");
    person.setAge(30);
    ObjectMapper objectMapper = new ObjectMapper();
    try {
    String json=objectMapper.writeValueAsString(person);
    System.out.println(json);
    } catch (JsonProcessingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();}
      3.3. 结果。

      {"id":1,"name":"zhangsan","age":30}  

      3.4. 生成数组

    List<Person> list=new ArrayList<Person>();
    Person person=new Person();
    person.setId(1);
    person.setName("zhangsan");
    person.setAge(30);
    list.add(person);
    Person person1=new Person();
    person1.setId(2);
    person1.setName("lisi");
    person1.setAge(20);
    list.add(person1);
    Person person2=new Person();
    person2.setId(3);
    person2.setName("wangwu");
    person2.setAge(30);
    list.add(person1);
    ObjectMapper objectMapper = new ObjectMapper();
    try {
    String json=objectMapper.writeValueAsString(list);
    System.out.println(json);
    } catch (JsonProcessingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

       3.5.结果。 

      [{"id":1,"name":"zhangsan","age":30},{"id":2,"name":"lisi","age":20},{"id":2,"name":"lisi","age":20}]  

       3.6.json解析对象。

    Person person=new Person();
    person.setId(1);
    person.setName("zhangsan");
    person.setAge(30);
    ObjectMapper objectMapper = new ObjectMapper();
    try {
    String json=objectMapper.writeValueAsString(person);
    System.out.println(json);
    Person info=objectMapper.readValue(json, Person.class);
    System.out.println(info.toString());
    } catch (JsonProcessingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

       3.7结果。

     {"id":1,"name":"zhangsan","age":30}  

     Person [id=1, name=zhangsan, age=30]  

       3.8.json解析数组。

    List<Person> list=new ArrayList<Person>();
    Person person=new Person();
    person.setId(1);
    person.setName("zhangsan");
    person.setAge(30);
    list.add(person);
    Person person1=new Person();
    person1.setId(2);
    person1.setName("lisi");
    person1.setAge(20);
    list.add(person1);
    Person person2=new Person();
    person2.setId(3);
    person2.setName("wangwu");
    person2.setAge(30);
    list.add(person1);
    ObjectMapper objectMapper = new ObjectMapper();
    try {
    String json=objectMapper.writeValueAsString(list);
    System.out.println(json);
    Person[] persons=objectMapper.readValue(json, Person[].class);
    for (Person info:persons) {
    System.out.println(info.toString());
    }
    } catch (JsonProcessingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

      3.9结果。

    [{"id":1,"name":"zhangsan","age":30},{"id":2,"name":"lisi","age":20},{"id":2,"name":"lisi","age":20}]  

    Person [id=1, name=zhangsan, age=30]  

    Person [id=2, name=lisi, age=20]  

    Person [id=2, name=lisi, age=20] 

  • 相关阅读:
    python_变量前加*或者**
    python 获取上级(上上级目录..)
    pip install git+
    《手把手教你》系列技巧篇(十八)-java+ selenium自动化测试-元素定位大法之By css中卷(详细教程)
    《手把手教你》系列技巧篇(十七)-java+ selenium自动化测试-元素定位大法之By css上卷(详细教程)
    《手把手教你》系列技巧篇(十六)-java+ selenium自动化测试-元素定位大法之By xpath下卷(详细教程)
    《手把手教你》系列技巧篇(十五)-java+ selenium自动化测试-元素定位大法之By xpath中卷(详细教程)
    《手把手教你》系列技巧篇(十四)-java+ selenium自动化测试-元素定位大法之By xpath上卷(详细教程)
    《手把手教你》系列技巧篇(十三)-java+ selenium自动化测试-元素定位大法之By partial link text(详细教程)
    《手把手教你》系列技巧篇(十二)-java+ selenium自动化测试-元素定位大法之By link text(详细教程)
  • 原文地址:https://www.cnblogs.com/jk-heart/p/8862017.html
Copyright © 2011-2022 走看看