作者/来源:新睿云 发布时间:2019-11-13
在编程语言中经常使用的JSON是什么,如何被定义的?以及在包括C、C++、C#、Java、JavaScript、Perl、Python等不同编程语言中如何得到应用的?JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。
下面介绍在PHP、Python以及Java中如何应用JSON。
1.在PHP中使用JSON
使用 PHP 编码 JSON(json_encode)
PHP 的 json_encode() 函数用于在 PHP 中编码 JSON。编码成功时这个函数返回给定值的 JSON 表示形式,失败则返回 FALSE。
语法:
string json_encode ( $value [, $options = 0 ] )
参数:
•value: 要编码的值。这个函数只能用于 UTF-8 编码的数据。
•options: 这个可选值是一个由 JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK,JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT 组成的位掩码。
示例:
下面的例子展示了如何使用 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}
下面的例子展示了 PHP 对象也可以被转换为 JSON:
<?php
class Emp {
public $name = "";
public $hobbies = "";
public $birthdate = "";
}
$e = new Emp();
$e->name = "sachin";
$e->hobbies = "sports";
$e->birthdate = date('m/d/Y h:i:s a', strtotime("8/5/1974 12:20:03"));
echo json_encode($e);
?>
执行时会生成如下所示结果:
{"name":"sachin","hobbies":"sports","birthdate":"08//05//1974 12:20:03 pm"}
使用 PHP 解码 JSON(json_decode)
PHP 的 json-decode() 函数用于在 PHP 中解码 JSON。这个函数返回从 JSON 解码到适当 PHP 类型的值。
2.在Python中使用JSON
使用 Python 编码 JSON(encode)
Python 的 encode() 函数用于将 Python 对象编码为 JSON 字符串表示。
语法:
demjson.encode(self, obj, nest_level=0)
示例:
下面的例子展示了使用 Python 将数组转换为 JSON:
#!/usr/bin/python
import demjson
data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
json = demjson.encode(data)
print json
执行时会生成如下所示结果:
[{"a":1,"b":2,"c":3,"d":4,"e":5}]
使用 Python 解码 JSON(decode)
Python 可以使用 demjson.decode() 函数处理 JSON 解码。这个函数返回从 JSON 解码到适当 Python 类型的值。
语法:
demjson.decode(self, txt)
示例:
下面的例子展示了如何使用 Python 解码 JSON 对象。
#!/usr/bin/python
import demjson
json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
text = demjson.decode(json)
print text
执行时生成如下所示结果:
{u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}
3.在Java中使用JSON
在 Java 中编码 JSON
下面这个简单的示例展示了使用 java.util.HashMap 的子类 JSONObject 编码一个 JSON 对象。这里并没有提供顺序。如果你需要严格的元素顺序,请使用 JSONValue.toJSONString(map) 方法的有序映射实现,比如 java.util.LinkedHashMap。
import org.json.simple.JSONObject;
class JsonEncodeDemo
{
public static void main(String[] args)
{
JSONObject obj = new JSONObject();
obj.put("name", "foo");
obj.put("num", new Integer(100));
obj.put("balance", new Double(1000.21));
obj.put("is_vip", new Boolean(true));
System.out.print(obj);
}
}
编译和执行上面的程序时,会生成如下所示结果:
{"balance": 1000.21, "num":100, "is_vip":true, "name":"foo"}
下面是另一个示例,使用 Java JSONObject 展示了 JSON 对象流:
java
import org.json.simple.JSONObject;
class JsonEncodeDemo
{
public static void main(String[] args)
{
JSONObject obj = new JSONObject();
obj.put("name","foo");
obj.put("num",new Integer(100));
obj.put("balance",new Double(1000.21));
obj.put("is_vip",new Boolean(true));
StringWriter out = new StringWriter();
obj.writeJSONString(out);
String jsonText = out.toString();
System.out.print(jsonText);
}
}
编译和执行上面的程序时,会生成如下所示结果:
{"balance": 1000.21, "num":100, "is_vip":true, "name":"foo"}
在 Java 中解码 JSON
下面的例子使用了 JSONObject 和 JSONArray,其中 JSONObject 就是 java.util.Map,JSONArray 就是 java.util.List,因此我们可以使用 Map 或 List 的标准操作访问它们。
import org.json.simple.JSONObject;
import org.json.simple.JSONArray;
import org.json.simple.parser.ParseException;
import org.json.simple.parser.JSONParser;
class JsonDecodeDemo
{
public static void main(String[] args)
{
JSONParser parser=new JSONParser();
String s = "[0,{/"1/":{/"2/":{/"3/":{/"4/":[5,{/"6/":7}]}}}}]";
try{
Object obj = parser.parse(s);
JSONArray array = (JSONArray)obj;
System.out.println("The 2nd element of array");
System.out.println(array.get(1));
System.out.println();
JSONObject obj2 = (JSONObject)array.get(1);
System.out.println("Field /"1/"");
System.out.println(obj2.get("1"));
s = "{}";
obj = parser.parse(s);
System.out.println(obj);
s= "[5,]";
obj = parser.parse(s);
System.out.println(obj);
s= "[5,,2]";
obj = parser.parse(s);
System.out.println(obj);
}catch(ParseException pe){
System.out.println("position: " + pe.getPosition());
System.out.println(pe);
}
}
}
编译和执行上面的程序时,会生成如下所示结果:
The 2nd element of array
{"1":{"2":{"3":{"4":[5,{"6":7}]}}}}
Field "1"
{"2":{"3":{"4":[5,{"6":7}]}}}
{}
[5]
[5,2]