JSON 的解析和生成
現在幾乎所有主流的程式語言都有提供函式庫來解析和生成 JSON 資料。
JavaScript
JavaScript 內建提供 JSON.parse()
和 JSON.stringify()
兩個函數來操作 JSON。
JSON.parse()
JSON.parse() 用來將 JSON 文字解析成 JavaScript 資料型態。
用法:
JSON.parse('{}'); // {}
JSON.parse('true'); // true
JSON.parse('"foo"'); // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse('null'); // null
JSON.stringify()
JSON.stringify() 用來將 JavaScript 資料型態轉換成 JSON 文字。
用法:
JSON.stringify({}); // '{}'
JSON.stringify(true); // 'true'
JSON.stringify('foo'); // '"foo"'
JSON.stringify([1, 'false', false]); // '[1,"false",false]'
JSON.stringify({ x: 5 }); // '{"x":5}'
Python
Python 內建也有提供 json library 來操作 JSON。
json.loads()
json.loads() 用來將 JSON 文字解析成 Python 資料型態。
>>> import json
>>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
[u'foo', {u'bar': [u'baz', None, 1.0, 2]}]
json.dumps()
json.dumps() 用來將 Python 資料型態轉換成 JSON 文字。
>>> import json
>>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
'["foo", {"bar": ["baz", null, 1.0, 2]}]'
PHP
PHP 內建也有 json_decode()
和 json_encode()
兩個函數來操作 JSON。
json_decode()
json_decode() 用來將 JSON 文字解析成 PHP 資料型態。
<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));
?>
上面會輸出:
object(stdClass)#1 (5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
json_encode()
json_encode() 用來將 PHP 資料型態轉換成 JSON 文字。
<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo json_encode($arr);
?>
上面會輸出:
{"a":1,"b":2,"c":3,"d":4,"e":5}
Ruby
在 Ruby 你可以使用 json module 來操作 JSON。
JSON.parse()
JSON.parse() 用來將 JSON 文字解析成 Ruby 資料型態。
require 'json'
my_hash = JSON.parse('{"hello": "goodbye"}')
puts my_hash["hello"] => "goodbye"
上面會輸出:
{"goodbye"=>"goodbye"}
JSON.generate()
JSON.generate() 用來將 Ruby 資料型態轉換成 JSON 文字。
require 'json'
my_hash = {:hello => "goodbye"}
puts JSON.generate(my_hash) => "{\"hello\":\"goodbye\"}"
上面會輸出:
{"{\"hello\":\"goodbye\"}"=>"{\"hello\":\"goodbye\"}"}
to_json
但 JSON.generate() 只能吃 objects 或 arrays,to_json 方法可以接受更多 Ruby classes。
require 'json'
puts JSON.generate(1)
上面會發生程式錯誤:
generate: only generation of JSON objects or arrays allowed (JSON::GeneratorError)
改用 to_json:
require 'json'
puts 1.to_json
正確輸出:
1