JavaScript操作JSON

JavaScript提供了 JSON.stringify()JSON.parse()evel()三個方法處理JSON數據。

// 使用JSON.stringify()将JS数据生成JSON格式的字符串
JSON.stringify(99); // "99"
JSON.stringify("foo"); // ""foo""
JSON.stringify(true); // "true"
JSON.stringify({foo: "bar"}); // "{"foo":"bar"}"
JSON.stringify(["foo", "bar"]); // "["foo","bar"]"

// 使用JSON.parse()将JSON格式的字符串转换为JS数据
JSON.parse("99"); // 99
JSON.parse("\"foo\""); // "foo"
JSON.parse("true"); // true
JSON.parse("{"foo":\"bar\"}"); // {foo: "bar"}
JSON.parse("[\"foo",\"bar\"]"); // ["foo", "bar"]

// 使用eval将JSON格式字符串生成JS数据
eval("("+"{\"foo\":\"bar\"}"+")"); // {foo: "bar"}

Python操作JSON

python標准庫中已包含了json模塊。模塊提供了dumps() loads() dump load JSONDecoder JSONEncoder 幾個API處理JSON。

>>> import json
>>> data = [{'name':'tom', 'lang':('python', 'english'), 'age':40}]
# 使用dumps()将数据转换为JSON字符串
>>> data_json = json.dumps(data);
>>> print data_json
[{"lang": ["python", "english"], "age": 40, "name": "tom"}]
# 使用loads()将JSON字符串转换为数据
>>> new_data = json.loads(data_json)
>>> new_data
[{'lang': ['python', 'english'], 'age': 40, 'name': 'tom'}]

如果JSON數據太大,你應該把數據放入文件,使用 json.dump()json.load() 來編碼和解碼JSON。

# 将数据通过特殊的形式转换为所有程序语言都认识的字符串,并写入文件
>>> with open('tmp.json', 'w') as f:
...   json.dump(data_j, f)
... 

> cat tmp.json
{"a": "aaa", "c": [{"c2": "cc2", "c1": "cc1"}], "b": "bbb"}
>>> with open('tmp.json', 'r') as f:
...   data = json.load(f)
... 
>>> print data
{'a': 'aaa', 'c': [{'c2': 'cc2', 'c1': 'cc1'}], 'b': 'bbb'}

Java操作JSON

Java並沒有內置JSON的解析,需要使用JSON第三方類庫,下面是常見的幾個JSON解析庫:

  • Gson: 谷歌开发的 JSON 库,功能十分全面。
  • FastJson: 阿里巴巴开发的 JSON 库,性能十分优秀。
  • Jackson: 社区十分活跃且更新速度很快。

以 FastJson 为例:

在 Maven 构建的项目中,在 pom.xml 文件中加入以下依赖即可:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.47</version>
</dependency>

JSON的編碼過程參考以下示例:

JSONObject object = new JSONObject();
//string
object.put("string","string");
//int
object.put("int",2);
//boolean
object.put("boolean",true);
//array
List<Integer> integers = Arrays.asList(1,2,3);
object.put("list",integers);
//null
object.put("null",null);
?
System.out.println(object);
// 输出 {"boolean":true,"string":"string","list":[1,2,3],"int":2}

JSON的解碼過程參考以下示例:

JSONObject object = JSONObject
.parseObject("{"boolean":true,"string":"string","list":[1,2,3],"int":2}");
//string
String s = object.getString("string");
System.out.println(s); // string
//int
int i = object.getIntValue("int");
System.out.println(i); // 2
//boolean
boolean b = object.getBooleanValue("boolean");
System.out.println(b); // true
//list
List<Integer> integers = JSON.parseArray(object.getJSONArray("list").toJSONString(),Integer.class);
integers.forEach(System.out::println); // 1 2 3
//null
System.out.println(object.getString("null")); // null