JSONView
JSONView是一个FireFox和Chrome上的插件,能够很好地将JSON数据打印出来,从而大大提高了JSON数据的可读性。
JSON与AJAX
AJAX可能是使用JSON数据中最常见的场景了。下面的这段代码示例,通过jQuery来调用一个REST风格的Web Service,并处理返回的JSON对象。
$.getJSON(‘’, 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与JAVAJackson是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库。
API Source
Google GSON
SOJO
org.json (by DouglasCrockford)
json-lib
json-io
jsontools
jsonbeans
JSON与RUBYRuby中也有很多与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 endJSON 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 = <<END { “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第三方库
API Source
ActiveSupport JSON
Yajl https://github.com/brianmario/yajl-ruby
Oj https://github.com/ohler55/oj
JSON与RUBY ON RAILSRuby on Rails也提供了将Ruby对象转换为JSON的功能。下面的例子中的Controller使用了render方法将一个Ruby对象以JSON数据的格式进行输出。
Rails中的ApplicationController会负责对象与JSON数据之间的互相转换 。因此,不需要额外调用to_json方法。
JSON SCHEMAJSON Schema用来定义JSON文档的结构,它可以被用来验证和校验发送或收到的JSON文档是否有效和规范。JSON Schema本身也是用JSON格式编写的,它的具体定义可以参考。
下面是JSON Schema的部分结构定义:
结构 描述
type 对象的数据类型,如Object,array,string,number 等
$schema 提供Schema版本的URI
required true/false
id 数据元素id
properties 数据元素的校验属性,包括最大值,最小值,枚举等