日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

java json 教程,【简明教程】JSON

發布時間:2025/4/5 javascript 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java json 教程,【简明教程】JSON 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JSON概覽

JSON(JavaScript Object Notation)是一種基于文本的數據交換格式。無論你的應用是用哪種開發語言編寫的(Java/EE,Ruby,PHP,C#/.Net等等),你都可以使用JSON來通過網絡進行數據交互和處理。幾乎所有的編程語言都有很好的庫或第三方工具來提供基于JSON的API支持,因此你可以非常方便地使用任何自己喜歡的編程語言來處理JSON數據。而另一方面隨著REST、像MongoDB這樣的NoSQL技術或標準的廣泛使用,JSON也正成為一種被推薦的數據交互格式。

JSON是在2001年,由Douglas Crockford創建的,并且被IETF(Internet Engineering Task Force)定義為RFC 4627標準,詳請參考:http://tools.ietf.org/html/rfc4627。JSON的媒體類型被定義為 application/json,而文件的后綴為.json。

JSON是什么

JSON是一種簡單數據格式,它有三種數據結構:

鍵值對 —— Name/Value (Key/Value)

對象 —— Object

數組 —— Arrays

一個有效的JSON文檔需要被包含在一對花括號內

{ JSON-Data }

請注意,有些開發社區或線上文檔直接將上面的JSON文檔稱為JSON字符串,這兩者的意思是一樣的。

為什么使用JSON

JSON被認為是XML的很好替代者。因為JSON的可讀性非常好,而且它沒有像XML那樣包含很多冗余的元素標簽,這使得應用在使用JSON進行網絡傳輸以及進行解析處理的速度更快,效率更高。

鍵值對 —— Name/Value

鍵值對是JSON中最基本的數據結構:

{

“firstName”: “John”

}

在上面的例子中屬性"firstName"是用一對雙引號括起來的一個字符串。而它的值"John"在這個例子中也是一個字符串,當然它還可以是其他類型,具體可參考后面數據類型的章節。在市面上很多的產品或技術聲稱他們使用的是JSON數據格式,但他們在定義屬性時,并沒有用雙引號將屬性名稱括起來,其實這是違反JSON定義標準的。

對象 —— Object

一個JSON對象是包含了一組未排序鍵值對的集合。下面例子中的address就是一個JSON對象:

{

“address” : {

“line1” : “555 Main Street”,

“city” : “Denver”,

“stateOrProvince” : “CO”,

“zipOrPostalCode” : “80202”,

“country” : “USA”

}

}

上面的例子中address對象包含了5個屬性,它們之間用,進行分割。

數組 —— Array

JSON中[]來包含數組元素,參考下面的例子:

{

“people” : [

{ “firstName”: “John”, “lastName”: “Smith”, “age”: 35 },

{ “firstName”: “Jane”, “lastName”: “Smith”, “age”: 32 }

]

}

數據類型

JSON中的數值(鍵值對中的值)可以是以下任意一種:

Object

Array

String

Number

Boolean

null

Number

數值類型數據可以是整型也可以是雙精度的浮點型數據。下面是一些示例:

“age”: 29

“cost”: 299.99

“temperature”: -10.5

“speed_of_light”: 1.23e11

“speed_of_light”: 1.23e+11

“speed_of_light”: 1.23E11

“speed_of_light”: 1.23E+11

上面的屬性(如age等)都是用雙引號括起來的字符串,而數值是不需要用雙引號括起來的。你可以在數值前加上-號來表示負數,也可以采用科學計數法。但不能在數值前加0或使用16進制來表示一個數值。

Boolean

JSON中的Boolean值可以用true或false來表示。

{

“emailValidated” : true

}

Boolean值也不需要使用雙引號來修飾。

null

嚴格來說null并不是一個數據類型,但它非常重要,它表示一個屬性或元素沒有值。因此請注意 ' ' 表示的是空字符串,而null表示的才是空值。

{

“age” : null

}

代碼注釋

JSON不允許在JSON文檔或字符串中添加注釋。注釋功能最早在JSON中是存在的,但開發者們錯誤地使用了它來輔助JSON數據的解析,當Douglas Crockford意識到這種不好的使用實踐后,便取消了注釋功能,以保證JSON在不同計算平臺間作為交互數據格式的特性。

樣式

你可能已經注意到了在之前的例子中,所有的屬性名稱都使用了駝峰式的命名規則。這并不是JSON的一個標準要求,但這能夠幫助提高JSON文檔的可讀性,因此作為一個事實標準在所有JSON應用中被使用。

語法

Douglas Crockford 在他的JSON網站http://www.json.org/中,給出了所有JSON語法語義的說明。另外還有一個iOS App JSON Pro FREE可以用來通過示例學習或參考JSON。

JSON校驗

一個文本文檔或字符串必須遵守JSON的語法定義,才能被視作一個有效的JSON文檔。JSON文檔是否有效非常重要,因為它直接決定了,你的JSON數據能否在不同的應用中被正確地解析和使用。JSONLint提供了一個可交互的Web版JSON校驗工具,你只需要將你的JSON文檔粘貼進去,并點擊校驗按鈕,它便會自動進行校驗,并將問題顯示在下方。

在上面這個例子中,這個JSON對象的city屬性沒有加上雙引號,導致校驗失敗。在返回的提示中,顯示了“Expecting 'STRING', got 'undefined'”錯誤。

JSONLint也提供了一個可以在Chrome中直接使用的插件。

JSON數據模型

在應用中手工編寫JSON文檔,會很枯燥并容易出錯。為了防止這樣的惡錯誤 ,你可以使用JSONPad或JSON Editor Online這樣的工具,它們能夠幫助你構建JSON邏輯模型(類似于UML),然后通過模型生成JSON文檔。

JSON Editor Online

[ JSON Editor Online] (http://jsoneditoronline.org/) 是一個在線JSON數據建模工具,他也提供了一個Chrome插件可以使用。

瀏覽器中的JSON

Firefox和Chrome都提供了一些很好的插件方便開發人員查看或處理JSON數據。

REST Client

Rest Client是Firefox中的一個擴展應用。他能夠幫助開發人員在瀏覽器中調試REST風格的Web Service。它最大的優點是能將返回的JSON數據結果,以很好的格式顯示出來。

JSONView

JSONView是一個FireFox和Chrome上的插件,能夠很好地將JSON數據打印出來,從而大大提高了JSON數據的可讀性。

JSON與AJAX

AJAX可能是使用JSON數據中最常見的場景了。下面的這段代碼示例,通過jQuery來調用一個REST風格的Web Service,并處理返回的JSON對象。

$.getJSON(‘http://example/service/addresses/home/1’,

function(data) {

var address = JSON.parse(data);

console.log(“Address Line 1 = “ + address.line1);

}

);

在上面的這段代碼中,$getJSON(這是一種jQuery中$.ajax()標準調用的一種縮寫形式)會發起一個HTTP GET 請求,調用Web Service,之后在它的隱式回調函數中,獲取返回的data數據,并通過JSON.parse()方法將返回的數據轉換為JSON對象。之后便可以像獲取普通屬性那樣(address.line1)獲取對象的屬性數值了。

JSON與JAVA

Jackson是JAVA中用來處理JSON的一個第三方庫。它很有名,并且提供了一組非常好用的JSON API。下面就是它的一個例子:

import java.io.Writer;

import java.io.StringWriter;

import org.codehaus.jackson.map.ObjectMapper;

public class Address {

private String line1;

private String city;

private String stateOrProvince;

private String zipOrPostalCode;

private String country;

public Address() {}

public String getLine1() {

return line1;

}

public void setLine1(line1) {

this.line1 = line1;

}

// Remaining getters and setters ...

}

Address addrOut = new Address();

// Call setters to populate addrOut …

ObjectMapper mapper = new ObjectMapper(); // Reuse this.

// Marshal Address object to JSON String.

Writer writer = new StringWriter();

mapper.writeValue(writer, addrOut);

System.out.println(writer.toString());

// Unmarshal Address object from JSON String.

String addrJsonStr =

“{“ +

“\”address\” : {“ +

“\”line1\” : \”555 Main Street\”,” +

“\”city\” : \”Denver\”,”

“\”stateOrProvince\” : \”CO\”,”

“\”zipOrPostalCode\” : \”80202\”,” +

“\”country\” : \”USA\”” +

“}” +

“}”;

Address addrIn = mapper.readValue(addrJsonStr, Address.class);

除了Jackson之外,還有一些其他基于JAVA的第三方JSON API庫。

JSON與RUBY

Ruby中也有很多與JSON相關的第三方庫,而JSON gem是Ruby自帶的,下面就是它的用法:

require ‘json’

class Address

attr_accessor :line1, :city, :state_or_province,

:zip_or_postal_code, :country

def initialize(line1=’’, city=’’, state_or_province=’’,

zip_or_postal_code=’’, country=’’)

@line1 = line1

@city = city

@state_or_province = state_or_province

@zip_or_postal_code = zip_or_postal_code

@country = country

end

def to_json

to_hash.to_json

end

def from_json!(str)

JSON.parse(str).each { |var, val| send(“#{var}=”, val) }

end

private

def to_hash

Hash[instance_variables.map { |var| [var[1..-1].to_sym,

send(var[1..-1])] }]

end

end

JSON gem的to_json方法將字符串或哈希轉換為JSON。Address對象的to_json方法通過將它的成員轉換成哈希再對哈希值調用to_json,最終將一個Address對象轉換為JSON格式。

addr1 = Address.new(‘555 Main Street’, ‘Denver’, ‘CO’, ‘80231’,

‘US’)

puts addr1.to_json

# Outputs the following …

{“line1”:”555 Main Street”,”city”:”Denver”,”state_or_

province”:”CO”,”zip_or_postal_code”:”80231”,”country”:”US”}

JSON gem的JSON.pase方法則將JSON字符串轉換為哈希。Address對象的from_jason!方法接收一個JSON字符串,然后調用JSON.parse來轉換哈希,然后再在對象上分別設置這些哈希的值。

json_addr = <

{

“line1” : “999 Broadway”, “city” : “Anytown”,

“state_or_province” : “CA”, “zip_or_postal_code” : “90210”,

“country” : “USA”

}

END

addr2 = Address.new

addr2.from_json!(json_addr)

除了JSON gem之外,還有以下一些Ruby的JSON第三方庫

JSON與RUBY ON RAILS

Ruby on Rails也提供了將Ruby對象轉換為JSON的功能。下面的例子中的Controller使用了render方法將一個Ruby對象以JSON數據的格式進行輸出。

Rails中的ApplicationController會負責對象與JSON數據之間的互相轉換 。因此,不需要額外調用to_json方法。

JSON SCHEMA

JSON Schema用來定義JSON文檔的結構,它可以被用來驗證和校驗發送或收到的JSON文檔是否有效和規范。JSON Schema本身也是用JSON格式編寫的,它的具體定義可以參考http://json-schema.org。

下面是JSON Schema的部分結構定義:

結構

描述

type

對象的數據類型,如Object,array,string,number 等

$schema

提供Schema版本的URI

required

true/false

id

數據元素id

properties

數據元素的校驗屬性,包括最大值,最小值,枚舉等

下面是JSON Schema的一個示例

“type”: “object”,

“$schema”: “http://json-schema.org/draft-03/schema”,

“id”: “#”,

“required”: true,

“properties”: {

“registrants”: {

“type”: “array”,

“id”: “registrants”,

“required”: true,

“items”: {

“type”: “object”,

“required”: false,

“properties”: {

“address”: {

“type”: “object”,

“id”: “address”,

“required”: true,

“properties”: {

“city”: {

“type”: “string”,

“id”: “city”,

“required”: true

},

“country”: {

“type”: “string”,

“id”: “country”,

“required”: false

},

“line1”: {

“type”: “string”,

“id”: “line1”,

“required”: true

},

“line2”: {

“type”: “string”,

“id”: “line2”,

“required”: false

},

“postalCode”: {

“type”: “string”,

“id”: “postalCode”,

“required”: true

},

“premise”: {

“type”: “string”,

“id”: “premise”,

“required”: true,

“enum”: [

“work”,

“home”,

“other”

]

},

“stateOrProvince”: {

“type”: “string”,

“id”: “stateOrProvince”,

“required”: true

}

}

},

“firstName”: {

“type”: “string”,

“id”: “firstName”,

“required”: true

},

“lastName”: {

“type”: “string”,

“id”: “lastName”,

“required”: true

},

“phoneNumber”: {

“type”: “object”,

“id”: “phoneNumber”,

“required”: true,

“properties”: {

“channel”: {

“type”: “string”,

“id”: “channel”,

“required”: true,

“enum”: [

“cell”,

“work”,

“home”

]

},

“number”: {

“type”: “string”,

“id”: “number”,

“required”: true

}

}

}

}

}

}

}

}

在上面的Schema中對JSON對象做了以下約束:

registrants必須是一個數組對象

phoneNumber的channel必須是cell, work, fax, home中的一個

address的premise必須是home, work, other中的一個。

一個使用上述JSON Schema的Web Service可以解析和處理下面這個JSON文檔:

{

"registrants": [

{

"firstName": "Fred",

"lastName": "Smith",

"phoneNumber": {

"channel": "cell",

"number": "303-555-1212"

},

"address": {

"premise": "home",

"line1": "555 Broadway NW",

"line2": "# 000",

"city": "Denver",

"stateOrProvince": "CO",

"postalCode": "88888",

"country": "USA"

}

}

]

}

JSON Schema 生成器

我們可以使用JSON Schema生成器來為一個有效的JSON文檔生成對應的Schema。你需要訪問(www.jsonschema.net),然后按照以下步驟操作:

將你的JSON文檔粘貼到右側文本框

選擇JSON輸入選項

點擊Generate Schema按鈕

JSON Schema 校驗器

我們可以用JSON Schema Validator來保證我們的JSON文檔時有效的。下面是針對不同開發語言的一些常見的JSON Schema 校驗器。

除了上面這些與編程語言相關的校驗器之外,你還可以直接使用在線的JSON Schema校驗器( http://json-schema-validator.herokuapp.com ),將Schema和JSON文檔粘貼到左側的文本框中,然后點擊Validate按鈕,校驗的結果就會顯示在屏幕右側。

總結

以上,我們已經初步了解了JSON的核心定義和用法,但對于JSON本身來說我們還只是了解了其中很小的一部分,還有許多與它相關的工具或技術可以使用。JSON作為一個數據標準,它已經逐步替代XML成為Internet上最受歡迎的交互數據格式。

簡書簽約作者:技匠,以上內容歡迎大家分享到朋友圈/微博等。如需轉載,請通過簡信聯系授權。謝謝大家!

總結

以上是生活随笔為你收集整理的java json 教程,【简明教程】JSON的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 超碰777| 美女大黄网站 | 无码人妻av免费一区二区三区 | 国产成人精品一区二三区四区五区 | 欧美激情91 | 亚洲免费观看高清 | 国产小视频免费观看 | 国产一区视频观看 | 人人射av| 熟妇人妻中文字幕 | 精彩视频一区二区 | 亚洲av无码成人精品国产 | 久久精热 | 日韩精品成人免费观看视频 | 91免费版在线 | 亚洲男女在线 | 亚洲精品一区二区三区不卡 | 激情视频久久 | 久久精品亚洲天堂 | 少妇人妻好深好紧精品无码 | 性——交——性——乱免费的 | 哺乳援交吃奶在线播放 | 国产人妖一区二区 | 久久久久无码国产精品不卡 | 黄色av免费在线观看 | 最近免费高清mv | 久久久性色精品国产免费观看 | 男受被做哭激烈娇喘gv视频 | 欧美性猛交xxxx乱大交蜜桃 | 中文无码一区二区三区在线观看 | 猛1被调教成公厕尿便失禁网站 | 中文在线最新版天堂 | 国产一区二区自拍 | 欧洲美女毛片 | 潘金莲一级淫片a.aaaaa播放 | 丰满少妇熟乱xxxxx视频 | 天天色天天爱 | 国产成人啪精品午夜在线观看 | 中国免费看的片 | 中日韩中文字幕 | 久操视频在线观看免费 | 日韩激情视频在线 | 免费高清av | 亚洲一区二区三区观看 | 在线不卡二区 | 亚洲av无码一区二区三区dv | 成人a在线观看 | 91av毛片 | 91中文字幕 | 一区二区不卡免费视频 | 亚洲欧美校园春色 | www五月 | www.激情网| 女人脱裤子让男人捅 | 成人国产片 | 非洲一级黄色片 | 337p日本欧洲亚洲大胆精筑 | 日日艹 | 国产精品伦一区二区三级视频 | 69精品在线观看 | 高潮毛片7777777毛片 | av男人的天堂在线 | 黄频视频在线观看 | 日韩精品高清视频 | 91性高潮久久久久久久 | 都市激情亚洲色图 | 蜜桃免费在线视频 | 麻豆天天躁天天揉揉av | 中文天堂在线资源 | 视频一区国产精品 | av无毛 | 黄色av电影网址 | 影音先锋男人资源网站 | 四虎影视免费永久大全 | av在线一 | 欧美国产一区二区在线观看 | 67194在线免费观看 | 天堂国产在线 | 日韩第一页在线观看 | 欧美极品jizzhd欧美爆 | 国产无遮无挡120秒 欧美综合图片 | 日本xx片 | 久久久久亚洲av成人网人人网站 | 香蕉精品视频在线观看 | 日韩人妻无码精品综合区 | 91亚洲精选 | 九色蝌蚪9l视频蝌蚪9l视频 | 少妇一级淫免费放 | 久久精品国产免费 | 中文字幕一二三四区 | 欧美精品一区二区三区三州 | 99久久精品国产一区色 | 国内自拍视频网站 | 91深夜视频| 欧美午夜精品久久久久久孕妇 | 国产精品无码一本二本三本色 | 你懂的在线网站 | 欧美国产三级 | 午夜电影一区二区三区 |