- JSON Basics Tutorial
- JSON - Home
- JSON - Overview
- JSON - Syntax
- JSON - DataTypes
- JSON - Objects
- JSON - Schema
- JSON - Comparison with XML
- JSON - Examples
- JSON with PHP
- JSON with Perl
- JSON with Python
- JSON with Ruby
- JSON with Java
- JSON with Ajax
- JSON Useful Resources
- JSON - Quick Guide
- JSON - Useful Resources
- JSON - Discussion
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 格式支持以下数据类型 -
先生。 | 类型和描述 |
---|---|
1 |
数字 JavaScript 中的双精度浮点格式 |
2 |
细绳 带反斜杠转义的双引号 Unicode |
3 |
布尔值 对或错 |
4 |
大批 值的有序序列 |
5 |
价值 它可以是字符串、数字、true 或 false、null 等 |
6 |
目的 键:值对的无序集合 |
7 |
空白 可以在任意一对令牌之间使用 |
8 |
无效的 空的 |
数字
它是 JavaScript 中的双精度浮点格式,取决于实现。
不使用八进制和十六进制格式。
Number 中不使用 NaN 或 Infinity。
下表显示了数字类型 -
先生。 | 类型和描述 |
---|---|
1 |
整数 数字 1-9、0 以及正数或负数 |
2 |
分数 0.3、0.9 等分数 |
3 |
指数 指数如 e、e+、e-、E、E+、E- |
句法
var json-object-name = { string : number_value, .......}
例子
显示数字数据类型的示例,值不应加引号 -
var obj = {marks: 97}
细绳
它是由零个或多个带反斜杠转义的双引号 Unicode 字符组成的序列。
字符是单个字符串,即长度为1的字符串。
该表显示了可以在 JSON 文档字符串中使用的各种特殊字符 -
先生。 | 类型和描述 |
---|---|
1 |
” 双引号 |
2 |
\ 反斜杠 |
3 |
/ 正斜杠 |
4 |
乙 退格键 |
5 | F 换页 |
6 | n 新队 |
7 | r 回车 |
8 | t 水平制表符 |
9 | 你 四个十六进制数字 |
句法
var json-object-name = { string : "string value", .......}
例子
显示字符串数据类型的示例 -
var obj = {name: 'Amit'}
布尔值
它包括真值或假值。
句法
var json-object-name = { string : true/false, .......}
例子
var obj = {name: 'Amit', marks: 97, distinction: 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
例子
var i = null; if(i == 1) { document.write("<h1>value is 1</h1>"); } else { document.write("<h1>value is null</h1>"); }
JSON 值
它包括 -
- 数字(整数或浮点数)
- 细绳
- 布尔值
- 大批
- 目的
- 无效的
句法
String | Number | Object | Array | TRUE | FALSE | NULL
例子
var i = 1; var j = "sachin"; var k = null;
JSON-对象
创建简单对象
JSON 对象可以使用 JavaScript 创建。让我们看看使用 JavaScript 创建 JSON 对象的各种方法 -
- 创建一个空对象 -
var JSONObj = {};
- 创建一个新对象 -
var JSONObj = new Object();
创建一个对象,其属性为书名,值为字符串,属性价格为数值。通过使用“.”来访问属性 运算符 -
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 对象。它产生以下结果 -
创建数组对象
以下示例显示使用 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 - 架构
JSON Schema 是基于 JSON 的格式规范,用于定义 JSON 数据的结构。它是根据 2011 年到期的 IETF 草案编写的。 JSON Schema -
- 描述您现有的数据格式。
- 清晰的、人类和机器可读的文档。
- 完整的结构验证,对于自动化测试很有用。
- 完成结构验证,验证客户提交的数据。
JSON 架构验证库
目前有多种可用于不同编程语言的验证器。目前最完整、最合规的 JSON 模式验证器是 JSV。
语言 | 图书馆 |
---|---|
C | 万家元素 (LGPLv3) |
爪哇 | json-schema-validator (LGPLv3) |
。网 | Json.NET(麻省理工学院) |
动作脚本3 | 弗丽嘉(麻省理工学院) |
哈斯克尔 | aeson 模式 (MIT) |
Python | JSON模式 |
Ruby | 自动解析(ASL 2.0);ruby-jsonschema (麻省理工学院) |
PHP | php-json-schema(麻省理工学院)。json 模式(伯克利) |
JavaScript | 有序(BSD);JSV;json 模式;马蒂奇(麻省理工学院);道场;坚持(修改版 BSD 或 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"] }
让我们检查一下可以在此模式中使用的各种重要关键字 -
先生。 | 关键字和描述 |
---|---|
1 |
$模式 $schema 关键字表明该模式是根据 v4 规范草案编写的。 |
2 |
标题 您将使用它来为您的架构指定标题。 |
3 |
描述 架构的一些描述。 |
4 |
类型 type 关键字定义了 JSON 数据的第一个约束:它必须是 JSON 对象。 |
5 |
特性 定义 JSON 文件中使用的各种键及其值类型、最小值和最大值。 |
6 |
必需的 这保留了所需属性的列表。 |
7 |
最低限度 这是对该值施加的约束,表示最小可接受值。 |
8 |
独家最低 如果“exclusiveMinimum”存在并且布尔值为 true,则如果实例严格大于“minimum”的值,则该实例有效。 |
9 |
最大限度 这是对值施加的约束,表示最大可接受值。 |
10 |
独家最大 如果“exclusiveMaximum”存在并且布尔值为true,则如果实例严格低于“maximum”的值,则该实例有效。 |
11 |
多个 如果实例除以该关键字的值的结果是整数,则数字实例对于“multipleOf”有效。 |
12 |
最长长度 字符串实例的长度定义为其字符的最大数量。 |
13 |
最小长度 字符串实例的长度定义为其字符的最小数量。 |
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>
JSON 与 PHP
本章介绍如何使用 PHP 编程语言对 JSON 对象进行编码和解码。让我们从准备环境开始使用 PHP for JSON 进行编程。
环境
从 PHP 5.2.0 开始,JSON 扩展默认捆绑并编译到 PHP 中。
JSON 函数
功能 | 图书馆 |
---|---|
json_encode | 返回值的 JSON 表示形式。 |
json_解码 | 解码 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 时,返回的对象将被转换为关联数组。
深度- 它是一个整数类型参数,指定递归深度
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) }
JSON 与 Perl
本章介绍如何使用 Perl 编程语言对 JSON 对象进行编码和解码。让我们从准备环境开始使用 Perl for 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 函数
功能 | 图书馆 |
---|---|
编码_json | 将给定的 Perl 数据结构转换为 UTF-8 编码的二进制字符串。 |
解码json | 解码 JSON 字符串。 |
to_json | 将给定的 Perl 数据结构转换为 json 字符串。 |
来自_json | 需要一个 json 字符串并尝试解析它,返回结果引用。 |
转换_祝福 | 使用具有 true 值的此函数,以便 Perl 可以在对象的类上使用 TO_JSON 方法将对象转换为 JSON。 |
在 Perl 中编码 JSON (encode_json)
Perlencode_json() 函数将给定的 Perl 数据结构转换为 UTF-8 编码的二进制字符串。
句法
$json_text = encode_json ($perl_scalar ); or $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\n";
执行时,这将产生以下结果 -
{"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\n";
执行时,它将产生以下结果 -
{"birthdate":"8/5/1974 12:20:03 pm","name":"sachin","hobbies":"sports"}
在 Perl 中解码 JSON (decode_json)
Perl中的decode_json()函数用于在Perl中解码JSON。此函数返回从 json 解码为适当 Perl 类型的值。
句法
$perl_scalar = decode_json $json_text or $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 = decode_json($json); print Dumper($text);
执行时,它将产生以下结果 -
$VAR1 = { 'e' => 5, 'c' => 3, 'a' => 1, 'b' => 2, 'd' => 4 };
JSON 与 Python
本章介绍如何使用 Python 编程语言对 JSON 对象进行编码和解码。让我们从准备环境开始使用 Python 进行 JSON 编程。
环境
在开始使用 Python 编码和解码 JSON 之前,您需要安装任何可用的 JSON 模块。在本教程中,我们下载并安装了Demjson,如下所示 -
$tar xvfz demjson-1.6.tar.gz $cd demjson-1.6 $python setup.py install
JSON 函数
功能 | 图书馆 |
---|---|
编码 | 将 Python 对象编码为 JSON 字符串表示形式。 |
解码 | 将 JSON 编码的字符串解码为 Python 对象。 |
在 Python 中编码 JSON(编码)
Pythonencode() 函数将 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}
JSON 与 Ruby
本章介绍如何使用 Ruby 编程语言对 JSON 对象进行编码和解码。让我们从准备环境开始使用 Ruby for 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"] }
JSON 与 Java
本章介绍如何使用 Java 编程语言对 JSON 对象进行编码和解码。让我们从准备环境开始使用 Java for JSON 进行编程。
环境
在开始使用 Java 编码和解码 JSON 之前,您需要安装任何可用的 JSON 模块。在本教程中,我们下载并安装了JSON.simple ,并将json-simple-1.1.1.jar文件的位置添加到环境变量 CLASSPATH 中。
JSON 和 Java 实体之间的映射
JSON.simple 在解码或解析时将实体从左侧映射到右侧,在编码时将实体从右侧映射到左侧。
JSON | 爪哇 |
---|---|
细绳 | java.lang.String |
数字 | java.lang.Number |
真|假 | java.lang.布尔值 |
无效的 | 无效的 |
大批 | java.util.List |
目的 | java.util.Map |
解码时, java.util.List的默认具体类是org.json.simple.JSONArray , java.util.Map的默认具体类是org.json.simple.JSONObject。
用 Java 编码 JSON
以下是使用 Java JSONObject 编码 JSON 对象的简单示例,Java JSONObject 是 java.util.HashMap 的子类。不提供订购。如果需要严格的元素排序,请使用 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应用程序可以异步地从服务器发送和检索数据,而不会干扰现有页面的显示和Behave。
许多开发人员使用 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 的运行情况 -
板球运动员详细信息
姓名 | 国家 |
---|---|
萨钦 |
印度 |
当您单击“更新详细信息”按钮时,您应该得到如下结果。如果您的浏览器支持 Javascript,您可以自己尝试使用AJAX 来实现 JSON。
板球运动员详细信息
姓名 | 国家 |
---|---|
布雷特 |
澳大利亚 |