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