关于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] 

原文地址:https://www.cnblogs.com/jk-heart/p/8862017.html