JSON - 快速指南
JSON - 概述
JSON 或 JavaScript 对象表示法是一种轻量级的基于文本的开放标准,专为人类可读的数据交换而设计。 JSON 使用的约定是程序员所熟知的,包括 C、C++、Java、Python、Perl 等。
JSON 代表 JavaScript 对象表示法。
格式由 Douglas Crockford 指定。
它被设计用于人类可读的数据交换。
它已从 JavaScript 脚本语言扩展而来。
文件扩展名为 .json。
JSON 互联网媒体类型为 application/json。
统一类型标识符为 public.json。
JSON 的用途
它在编写基于 JavaScript 的应用程序时使用,其中包括浏览器扩展和网站。
JSON 格式用于通过网络连接序列化和传输结构化数据。
它主要用于在服务器和 Web 应用程序之间传输数据。
Web 服务和 API 使用 JSON 格式提供公共数据。
它可以与现代编程语言一起使用。
JSON 的特点
- JSON 易于读写。
- 它是一种轻量级的基于文本的交换格式。
- JSON 与语言无关。
JSON 中的简单示例
以下示例展示了如何使用 JSON 根据书籍的主题和版本存储与书籍相关的信息。
{
"book": [
{
"id":"01",
"language": "Java",
"edition": "third",
"author": "Herbert Schildt"
},
{
"id":"07",
"language": "C++",
"edition": "second",
"author": "E.Balagurusamy"
}
]
}
理解了上面的程序后,我们再来尝试另一个例子。让我们将下面的代码保存为 json.htm −
<html>
<head>
<title>JSON example</title>
<script language = "javascript" >
var object1 = { "language" : "Java", "author" : "herbert schildt" };
document.write("<h1>JSON with JavaScript example</h1>");
document.write("<br>");
document.write("<h3>Language = " + object1.language+"</h3>");
document.write("<h3>Author = " + object1.author+"</h3>");
var object2 = { "language" : "C++", "author" : "E-Balagurusamy" };
document.write("<br>");
document.write("<h3>Language = " + object2.language+"</h3>");
document.write("<h3>Author = " + object2.author+"</h3>");
document.write("<hr />");
document.write(object2.language + " programming language can be studied " + "from book written by " + object2.author);
document.write("<hr />");
</script>
</head>
<body>
</body>
</html>
现在让我们尝试使用 IE 或任何其他支持 javascript 的浏览器打开 json.htm,结果如下 −
您可以参考 JSON 对象章节了解有关 JSON 对象的更多信息。
JSON - 语法
让我们快速了解一下 JSON 的基本语法。JSON 语法基本上被视为 JavaScript 语法的子集;它包括以下 −
数据以名称/值对的形式表示。
花括号包含对象,每个名称后跟 ':'(冒号),名称/值对以 ,(逗号)分隔。
方括号包含数组,值以 ,(逗号)分隔。
下面是一个简单的例子 −
{
"book": [
{
"id": "01",
"language": "Java",
"edition": "third",
"author": "Herbert Schildt"
},
{
"id": "07",
"language": "C++",
"edition": "second",
"author": "E.Balagurusamy"
}
]
}
JSON 支持以下两种数据结构 −
名称/值对的集合 − 不同的编程语言都支持此数据结构。
有序值列表 − 包括数组、列表、向量或序列等。
JSON - 数据类型
JSON 格式支持以下数据类型 −
| Sr.No. | 类型 &描述 |
|---|---|
| 1 |
数字 JavaScript 中的双精度浮点格式 |
| 2 |
字符串 带反斜杠转义的双引号 Unicode |
| 3 |
布尔值 true 或 false |
| 4 |
数组 有序序列值 |
| 5 |
值 它可以是字符串、数字、真或假、空等 |
| 6 |
对象 无序的键值对集合 |
| 7 |
空格 可用于任何一对标记之间 |
| 8 |
null empty |
Number
它是 JavaScript 中的双精度浮点格式,取决于实现。
不使用八进制和十六进制格式。
Number 中不使用 NaN 或 Infinity。
下表显示了数字类型 −
| Sr.No. | 类型 &描述 |
|---|---|
| 1 |
整数 数字 1-9、0 和正数或负数 |
| 2 |
分数 分数如 .3、.9 |
| 3 |
指数 指数如 e、e+、e-、E、E+、E- |
语法
var json-object-name = { string : number_value, .......}
示例
示例显示 Number 数据类型,值不应加引号 −
var obj = {marks: 97}
字符串
它是零个或多个双引号 Unicode 字符的序列,带有反斜杠转义。
字符是单个字符串,即长度为 1 的字符串。
该表显示了您可以在 JSON 文档的字符串中使用的各种特殊字符 −
| 序号 | 类型 &描述 |
|---|---|
| 1 |
" 双引号 |
| 2 |
\ 反斜杠 |
| 3 |
/ 正斜杠 |
| 4 |
b 退格键 |
| 5 | f 换页符 |
| 6 | n 换行符 |
| 7 | r 回车符 |
| 8 | t 水平制表符 |
| 9 | u 四个十六进制数字 |
语法
var json-object-name = { string : "string value", .......}
示例
显示字符串数据类型 − 的示例
var obj = {name: 'Amit'}
布尔值
它包括真值或假值。
语法
var json-object-name = { string : true/false, .......}
示例
var obj = {name: 'Amit', marks: 97, difference: true}
数组
它是值的有序集合。
这些值括在方括号中,这意味着该数组以 .[. 开头,以 .]. 结尾。
值以 ,(逗号)分隔。
数组索引可以从 0 或 1 开始。
当键名称是连续整数时,应使用数组。
语法
[ value, .......]
示例
显示包含多个对象的数组的示例 −
{
"books": [
{ "language":"Java" , "edition":"second" },
{ "language":"C++" , "lastName":"fifth" },
{ "language":"C" , "lastName":"third" }
]
}
对象
它是一组无序的名称/值对。
对象括在花括号中,即以"{"开头,以"}"结尾。
每个名称后跟":"(冒号),键/值对以","(逗号)分隔。
键必须是字符串,并且彼此之间应不同。
当键名称是任意字符串时,应使用对象。
语法
{ string : value, .......}
示例
显示对象的示例 −
{
"id": "011A",
"language": "JAVA",
"price": 500,
}
空格
它可以插入任何一对标记之间。它可以被添加以使代码更具可读性。示例显示带有和不带有空格 − 的声明
语法
{string:" ",....}
示例
var obj1 = {"name": "Sachin Tendulkar"}
var obj2 = {"name": "SauravGanguly"}
null
它表示空类型。
语法
null
示例
var i = null;
if(i == 1) {
document.write("<h1>value is 1</h1>");
} else {
document.write("<h1>value is null</h1>");
}
JSON 值
它包含 −
- 数字(整数或浮点数)
- 字符串
- 布尔值
- 数组
- 对象
- null
语法
String | Number | Object | Array | TRUE | FALSE | NULL
示例
var i = 1; var j = "sachin"; var k = null;
JSON - 对象
创建简单对象
可以使用 JavaScript 创建 JSON 对象。让我们看看使用 JavaScript 创建 JSON 对象的各种方法 −
- 创建一个空对象 −
var JSONObj = {};
- 创建一个新对象 −
var JSONObj = new Object();
创建一个对象,其中属性 bookname 的值为字符串,属性 price 的值为数字。使用 '.' 访问属性。运算符 −
var JSONObj = { "bookname ":"VB BLACK BOOK", "price":500 };
这是一个使用 JSON 在 javascript 中创建对象的示例,将以下代码保存为 json_object.htm −
<html>
<head>
<title>Creating Object JSON with JavaScript</title>
<script language = "javascript" >
var JSONObj = { "name" : "tutorialspoint.com", "year" : 2005 };
document.write("<h1>JSON with JavaScript example</h1>");
document.write("<br>");
document.write("<h3>Website Name = "+JSONObj.name+"</h3>");
document.write("<h3>Year = "+JSONObj.year+"</h3>");
</script>
</head>
<body>
</body>
</html>
现在让我们尝试使用 IE 或任何其他支持 javaScript 的浏览器打开 Json Object。它会产生以下结果 −
创建数组对象
以下示例显示了如何使用 JSON 在 javascript 中创建数组对象,将以下代码保存为 json_array_object.htm −
<html>
<head>
<title>Creation of array object in javascript using JSON</title>
<script language = "javascript" >
document.writeln("<h2>JSON array object</h2>");
var books = { "Pascal" : [
{ "Name" : "Pascal Made Simple", "price" : 700 },
{ "Name" : "Guide to Pascal", "price" : 400 }],
"Scala" : [
{ "Name" : "Scala for the Impatient", "price" : 1000 },
{ "Name" : "Scala in Depth", "price" : 1300 }]
}
var i = 0
document.writeln("<table border = '2'><tr>");
for(i = 0;i<books.Pascal.length;i++) {
document.writeln("<td>");
document.writeln("<table border = '1' width = 100 >");
document.writeln("<tr><td><b>Name</b></td><td width = 50>" + books.Pascal[i].Name+"</td></tr>");
document.writeln("<tr><td><b>Price</b></td><td width = 50>" + books.Pascal[i].price +"</td></tr>");
document.writeln("</table>");
document.writeln("</td>");
}
for(i = 0;i<books.Scala.length;i++) {
document.writeln("<td>");
document.writeln("<table border = '1' width = 100 >");
document.writeln("<tr><td><b>Name</b></td><td width = 50>" + books.Scala[i].Name+"</td></tr>");
document.writeln("<tr><td><b>Price</b></td><td width = 50>" + books.Scala[i].price+"</td></tr>");
document.writeln("</table>");
document.writeln("</td>");
}
document.writeln("</tr></table>");
</script>
</head>
<body>
</body>
</html>
现在让我们尝试使用 IE 或任何其他支持 javaScript 的浏览器打开 Json 数组对象。它会产生以下结果 −
JSON - Schema
JSON Schema 是一种基于 JSON 的格式规范,用于定义 JSON 数据的结构。它是根据 IETF 草案编写的,该草案于 2011 年到期。JSON Schema −
- 描述您现有的数据格式。
- 清晰、人机可读的文档。
- 完整的结构验证,可用于自动化测试。
- 完整的结构验证,验证客户端提交的数据。
JSON Schema 验证库
目前有多种验证器可用于不同的编程语言。目前最完整、最兼容的 JSON Schema 验证器是 JSV。
| 语言 | 库 |
|---|---|
| C | WJElement (LGPLv3) |
| Java | json-schema-validator (LGPLv3) |
| .NET | Json.NET (MIT) |
| ActionScript 3 | Frigga (MIT) |
| Haskell | aeson-schema (MIT) |
| Python | Jsonschema |
| Ruby | autoparse (ASL 2.0); ruby-jsonschema (MIT) |
| PHP | php-json-schema (MIT). json-schema (Berkeley) |
| JavaScript | Orderly (BSD); JSV; json-schema; Matic (MIT); Dojo; Persevere (modified BSD or AFL 2.0); schema.js. |
JSON 模式示例
下面给出了一个基本的 JSON 模式,它涵盖了经典的产品目录描述 −
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Product",
"description": "A product from Acme's catalog",
"type": "object",
"properties": {
"id": {
"description": "The unique identifier for a product",
"type": "integer"
},
"name": {
"description": "Name of the product",
"type": "string"
},
"price": {
"type": "number",
"minimum": 0,
"exclusiveMinimum": true
}
},
"required": ["id", "name", "price"]
}
让我们检查一下此架构中可以使用的各种重要关键字 −
| Sr.No. | 关键字 &描述 |
|---|---|
| 1 |
$schema $schema 关键字表明此架构是根据 v4 规范草案编写的。 |
| 2 |
title 您将使用它为您的架构添加标题。 |
| 3 |
description 架构的简要描述。 |
| 4 |
type type 关键字定义我们对 JSON 数据的第一个约束:它必须是一个 JSON 对象。 |
| 5 |
properties 定义 JSON 文件中使用的各种键及其值类型、最小值和最大值。 |
| 6 |
required 这会保留必需属性的列表。 |
| 7 |
minimum 这是对值施加的约束,表示可接受的最小值。 |
| 8 |
exclusiveMinimum 如果"exclusiveMinimum"存在且布尔值为 true,则该实例在严格大于"minimum"的值时有效。 |
| 9 |
maximum 这是对值的约束,表示最大可接受值。 |
| 10 |
exclusiveMaximum 如果"exclusiveMaximum"存在且布尔值为 true,则该实例在严格小于"最大值"。 |
| 11 |
multipleOf 如果数值实例除以此关键字的值的结果为整数,则该数值实例对"multipleOf"有效。 |
| 12 |
maxLength 字符串实例的长度定义为其字符的最大数量。 |
| 13 |
minLength 字符串实例的长度定义为其字符的最小数量。 |
| 14 |
模式 如果正则表达式成功匹配该实例,则该字符串实例被视为有效。 |
您可以查看http://json-schema.org以获取可用于定义 JSON 模式的关键字的完整列表。上述模式可用于测试以下 JSON 代码的有效性 −
[
{
"id": 2,
"name": "An ice sculpture",
"price": 12.50,
},
{
"id": 3,
"name": "A blue mouse",
"price": 25.50,
}
]
JSON - 与 XML 的比较
JSON 和 XML 都是人类可读的格式,并且与语言无关。它们都支持在现实世界中创建、读取和解码。我们可以根据以下因素将 JSON 与 XML 进行比较 −
详细
XML 比 JSON 更详细,因此程序员编写 JSON 的速度更快。
数组用法
XML 用于描述结构化数据,它不包含数组,而 JSON 包含数组。
解析
JavaScript 的 eval 方法解析 JSON。当应用于 JSON 时,eval 返回所描述的对象。
示例
XML 和 JSON 的个别示例 −
JSON
{
"company": Volkswagen,
"name": "Vento",
"price": 800000
}
XML
<car> <company>Volkswagen</company> <name>Vento</name> <price>800000</price> </car>
使用 PHP 的 JSON
本章介绍如何使用 PHP 编程语言对 JSON 对象进行编码和解码。让我们先准备环境,开始使用 PHP 进行 JSON 编程。
环境
从 PHP 5.2.0 开始,JSON 扩展默认捆绑并编译到 PHP 中。
JSON 函数
| 函数 | 库 |
|---|---|
| json_encode | 返回值的 JSON 表示形式。 |
| json_decode | 解码 JSON字符串。 |
| json_last_error | 返回最后发生的错误。 |
在 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', "8/5/1974 12:20:03 p");
$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 类型的值。
语法
mixed json_decode ($json [,$assoc = false [, $depth = 512 [, $options = 0 ]]])
参数
json_string − 它是一个编码字符串,必须是 UTF-8 编码数据。
assoc − 它是一个布尔类型参数,当设置为 TRUE 时,返回的对象将转换为关联数组。
depth − 它是一个整数类型参数,指定递归深度
options − JSON 解码的整数类型位掩码,支持 JSON_BIGINT_AS_STRING。
示例
以下示例展示了如何使用 PHP 解码 JSON 对象 −
<?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)
}
使用 Perl 编写 JSON
本章介绍如何使用 Perl 编程语言对 JSON 对象进行编码和解码。让我们先准备环境,开始使用 Perl 进行 JSON 编程。
环境
在开始使用 Perl 编码和解码 JSON 之前,您需要安装 JSON 模块,该模块可从 CPAN 获取。下载 JSON-2.53.tar.gz 或任何其他最新版本后,请按照下面提到的步骤 −
$tar xvfz JSON-2.53.tar.gz $cd JSON-2.53 $perl Makefile.PL $make $make install
JSON 函数
| 函数 | 库 |
|---|---|
| encode_json | 将给定的 Perl 数据结构转换为 UTF-8 编码的二进制字符串。 |
| decode_json | 解码 JSON 字符串。 |
| to_json | 将给定的 Perl 数据结构转换为 json 字符串。 |
| from_json | 期望 json 字符串并尝试解析它,返回结果引用。 |
| convert_blessed | 将此函数与 true 值一起使用,以便 Perl 可以在对象的类上使用 TO_JSON 方法将对象转换为 JSON。 |
在 Perl 中编码 JSON (encode_json)
Perl encode_json() 函数转换将给定的 Perl 数据结构转换为 UTF-8 编码的二进制字符串。
语法
$json_text = encode_json ($perl_scalar ); 或 $json_text = JSON->new->utf8->encode($perl_scalar);
示例
以下示例显示了使用 Perl 的 JSON 数组 −
#!/usr/bin/perl
use JSON;
my %rec_hash = ('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
my $json = encode_json \%rec_hash;
print "$json
";
执行时,将产生以下结果 −
{"e":5,"c":3,"a":1,"b":2,"d":4}
以下示例展示了如何将 Perl 对象转换为 JSON −
#!/usr/bin/perl
package Emp;
sub new {
my $class = shift;
my $self = {
name => shift,
hobbies => shift,
birthdate => shift,
};
bless $self, $class;
return $self;
}
sub TO_JSON { return { %{ shift() } }; }
package main;
use JSON;
my $JSON = JSON->new->utf8;
$JSON->convert_blessed(1);
$e = new Emp( "sachin", "sports", "8/5/1974 12:20:03 pm");
$json = $JSON->encode($e);
print "$json
";
执行后将产生以下结果 −
{"birthdate":"8/5/1974 12:20:03 pm","name":"sachin","hobbies":"sports"}
在 Perl 中解码 JSON (decode_json)
Perl 的 decrypt_json() 函数用于在 Perl 中解码 JSON。此函数将从 json 解码的值返回到适当的 Perl 类型。
语法
$perl_scalar = decrypt_json $json_text 或 $perl_scalar = JSON->new->utf8->decode($json_text)
示例
以下示例展示了如何使用 Perl 解码 JSON 对象。如果您的机器上还没有 Data::Dumper 模块,则需要在此处安装它。
#!/usr/bin/perl
use JSON;
use Data::Dumper;
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
$text = decrypt_json($json);
print Dumper($text);
执行后,将产生以下结果 −
$VAR1 = {
'e' => 5,
'c' => 3,
'a' => 1,
'b' => 2,
'd' => 4
};
使用 Python 编写 JSON
本章介绍如何使用 Python 编程语言对 JSON 对象进行编码和解码。让我们先准备环境,开始使用 Python 编写 JSON 程序。
环境
在开始使用 Python 编码和解码 JSON 之前,您需要安装任何可用的 JSON 模块。在本教程中,我们已下载并安装了 Demjson,如下所示 −
$tar xvfz demjson-1.6.tar.gz $cd demjson-1.6 $python setup.py install
JSON 函数
| 函数 | 库 |
|---|---|
| encode | 将 Python 对象编码为 JSON 字符串表示形式。 |
| decode | 将 JSON 编码的字符串解码为 Python 对象。 |
在 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(解码)
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}
使用 Ruby 编写 JSON
本章介绍如何使用 Ruby 编程语言对 JSON 对象进行编码和解码。让我们先准备环境,开始使用 Ruby 进行 JSON 编程。
环境
在使用 Ruby 开始对 JSON 进行编码和解码之前,您需要安装 Ruby 可用的任何 JSON 模块。您可能需要安装 Ruby gem,但如果您运行的是最新版本的 Ruby,则必须已在计算机上安装 gem,否则让我们按照以下步骤操作(假设您已安装 gem −
$gem install json
使用 Ruby 解析 JSON
以下示例显示前 2 个键保存字符串值,后 3 个键保存字符串数组。让我们将以下内容保存在名为 input.json 的文件中。
{
"President": "Alan Isaac",
"CEO": "David Richardson",
"India": [
"Sachin Tendulkar",
"Virender Sehwag",
"Gautam Gambhir"
],
"Srilanka": [
"Lasith Malinga",
"Angelo Mathews",
"Kumar Sangakkara"
],
"England": [
"Alastair Cook",
"Jonathan Trott",
"Kevin Pietersen"
]
}
下面给出一个 Ruby 程序,用于解析上述 JSON 文档 −
#!/usr/bin/ruby
require 'rubygems'
require 'json'
require 'pp'
json = File.read('input.json')
obj = JSON.parse(json)
pp obj
执行后将产生以下结果 −
{
"President"=>"Alan Isaac",
"CEO"=>"David Richardson",
"India"=>
["Sachin Tendulkar", "Virender Sehwag", "Gautam Gambhir"],
"Srilanka"=>
["Lasith Malinga ", "Angelo Mathews", "Kumar Sangakkara"],
"England"=>
["Alastair Cook", "Jonathan Trott", "Kevin Pietersen"]
}
使用 Java 编写 JSON
本章介绍如何使用 Java 编程语言对 JSON 对象进行编码和解码。让我们先准备环境,开始使用 Java 进行 JSON 编程。
环境
在开始使用 Java 编码和解码 JSON 之前,您需要安装任何可用的 JSON 模块。在本教程中,我们下载并安装了 JSON.simple,并将 json-simple-1.1.1.jar 文件的位置添加到环境变量 CLASSPATH。
JSON 和 Java 实体之间的映射
JSON.simple 在解码或解析时将实体从左侧映射到右侧,在编码时将实体从右侧映射到左侧。
| JSON | Java |
|---|---|
| string | java.lang.String |
| number | java.lang.Number |
| true|false | java.lang.Boolean |
| null | null |
| array | java.util.List |
| object | java.util.Map |
在解码时,java.util.List的默认具体类是org.json.simple.JSONArray 和 java.util.Map 的默认具体类是 org.json.simple.JSONObject。
在 Java 中编码 JSON
以下是使用 Java JSONObject(java.util.HashMap 的子类)编码 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 对象流式传输 −
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]
JSON 与 Ajax
AJAX 是异步 JavaScript 和 XML,在客户端用作一组相互关联的 Web 开发技术,用于创建异步 Web 应用程序。根据 AJAX 模型,Web 应用程序可以异步地从服务器发送和检索数据,而不会干扰现有页面的显示和行为。
许多开发人员使用 JSON 在客户端和服务器之间传递 AJAX 更新。更新实时体育比分的网站可以视为 AJAX 的一个例子。如果必须在网站上更新这些比分,则必须将它们存储在服务器上,以便网页可以在需要时检索比分。这就是我们可以使用 JSON 格式数据的地方。
使用 AJAX 更新的任何数据都可以使用 JSON 格式存储在 Web 服务器上。使用 AJAX 是为了让 javascript 在必要时检索这些 JSON 文件,解析它们,并执行以下操作之一 −
将解析后的值存储在变量中,以便进一步处理,然后再显示在网页上。
它直接将数据分配给网页中的 DOM 元素,以便它们显示在网站上。
示例
以下代码显示使用 AJAX 的 JSON。将其保存为 ajax.htm 文件。这里异步使用加载函数 loadJSON() 来上传 JSON 数据。
<html>
<head>
<meta content = "text/html; charset = ISO-8859-1" http-equiv = "content-type">
<script type = "application/javascript">
function loadJSON() {
var data_file = "http://www.tutorialspoint.com/json/data.json";
var http_request = new XMLHttpRequest();
try{
// Opera 8.0+, Firefox, Chrome, Safari
http_request = new XMLHttpRequest();
}catch (e) {
// Internet Explorer Browsers
try{
http_request = new ActiveXObject("Msxml2.XMLHTTP");
}catch (e) {
try{
http_request = new ActiveXObject("Microsoft.XMLHTTP");
}catch (e) {
// Something went wrong
alert("Your browser broke!");
return false;
}
}
}
http_request.onreadystatechange = function() {
if (http_request.readyState == 4 ) {
// Javascript function JSON.parse to parse JSON data
var jsonObj = JSON.parse(http_request.responseText);
// jsonObj variable now contains the data structure and can
// be accessed as jsonObj.name and jsonObj.country.
document.getElementById("Name").innerHTML = jsonObj.name;
document.getElementById("Country").innerHTML = jsonObj.country;
}
}
http_request.open("GET", data_file, true);
http_request.send();
}
</script>
<title>tutorialspoint.com JSON</title>
</head>
<body>
<h1>Cricketer Details</h1>
<table class = "src">
<tr><th>Name</th><th>Country</th></tr>
<tr><td><div id = "Name">Sachin</div></td>
<td><div id = "Country">India</div></td></tr>
</table>
<div class = "central">
<button type = "button" onclick = "loadJSON()">Update Details </button>
</div>
</body>
</html>
下面给出的是输入文件 data.json,其中包含 JSON 格式的数据,当我们单击 更新详细信息 按钮时,这些数据将异步上传。此文件保存在 http://www.tutorialspoint.com/json/
{"name": "Brett", "country": "Australia"}
上述 HTML 代码将生成以下屏幕,您可以在其中检查 AJAX 的实际运行情况 −
运动员详情
| Name | Country |
|---|---|
Sachin |
India |
单击Update Detail按钮时,您应该会得到如下结果。您可以自己尝试使用 AJAX 的 JSON,前提是您的浏览器支持 Javascript。
运动员详情
| Name | Country |
|---|---|
Brett |
Australia |

