關於JSON

一.JSON 描述。java

    JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。它基於ECMAScript的一個子集。 JSON採用徹底獨立於語言的文本格式,可是也使用了相似於C語言家族的習慣(包括C、C++、C#、Java、JavaScript、Perl、Python等)。這些特性使JSON成爲理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成(通常用於提高網絡傳輸速率)。jquery

二.語法規則。git

   1. JSON是由‘名稱/值’對組成的集合,’名稱/值‘格式例如,「key1」:value1。程序員

   2.JSON的值(value) 能夠是雙引號括起來的字符串(string)、數值(number)、true、false、 null、對象(object)或者數組(array)。github

   3.JSON有兩種結構,一種是對象,另外一種是數組。web

      (1).對象(object),是一個無序的「‘名稱/值’對」集合。一個對象以「{」(左括號)開始,「}」(右括號)結束。每一個「名稱」後跟一個「:」(冒號);「‘名稱/值’ 對」之間使用「,」(逗號)     分  隔。 是由{}括起來的,格式例如,{"key1":value1,"key2":value2,"key3":value3,...}。ajax

      (2).數組(array) ,是值(value)的有序集合。一個數組以「[」(左中括號)開始,「]」(右中括號)結束。值之間使用「,」(逗號)分隔,是由[]括起來的。格式例如,[{"key1":value1,"key2":value2,"key3":value3},{"key1":value1,"key2":value2,"key3":value3}...]。json

三.功能windows

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同樣都是一種數據交換格式

 4、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] 

相關文章
相關標籤/搜索