JSON - 快速指南
JSON - Overview
JSON或JavaScript Object Notation是一种基于文本的轻量级开放标准,专为人类可读的数据交换而设计。 程序员已经知道JSON使用的约定,包括C,C ++,Java,Python,Perl等。
JSON代表JavaScript Object Notation。
格式由Douglas Crockford指定。
它专为人类可读的数据交换而设计。
它已经从JavaScript脚本语言扩展而来。
文件扩展名为.json.
JSON Internet Media类型是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 - Syntax
让我们快速浏览一下JSON的基本语法。 JSON语法基本上被认为是JavaScript语法的子集; 它包括以下内容 -
数据以名称/值对表示。
大括号保持对象,每个名称后跟':'(冒号),名称/值对用(逗号)分隔。
方括号包含数组,值以(逗号)分隔。
以下是一个简单的例子 -
{
"book": [
{
"id": "01",
"language": "Java",
"edition": "third",
"author": "Herbert Schildt"
},
{
"id": "07",
"language": "C++",
"edition": "second",
"author": "E.Balagurusamy"
}
]
}
JSON支持以下两种数据结构 -
Collection of name/value pairs - 此数据结构由不同的编程语言支持。
Ordered list of values - 包括数组,列表,向量或序列等。
JSON - DataTypes
JSON格式支持以下数据类型 -
S.号 | 类型和描述 |
---|---|
Number | JavaScript中的双精度浮点格式 |
String | 带有反斜杠转义的双引号Unicode |
Boolean | True or False |
Array | 有序的值序列 |
Value | 它可以是字符串,数字,真或假,null等 |
Object | 一个无序的键:值对集合 |
Whitespace | 可以在任何一对令牌之间使用 |
null | empty |
Number
它是JavaScript中的双精度浮点格式,它取决于实现。
不使用八进制和十六进制格式。
Number中没有使用NaN或Infinity。
下表显示了数字类型 -
S.号 | 类型和描述 |
---|---|
Integer | 数字1-9,0和正数或负数 |
Fraction | Fractions like .3, .9 |
Exponent | 指数如e,e +,e-,E,E +,E- |
语法 (Syntax)
var json-object-name = { string : number_value, .......}
例子 (Example)
显示数字数据类型的示例,不应引用值 -
var obj = {marks: 97}
String
它是一个零或多个双引号Unicode字符的序列,带有反斜杠转义。
字符是单个字符串,即长度为1的字符串。
该表显示了字符串类型 -
S.号 | 类型和描述 |
---|---|
" | 双引号 |
\ | 反向固定 |
/ | solidus |
b | backspace |
f | form feed |
n | new line |
r | carriage return |
t | 水平标签 |
u | 四个十六进制数字 |
语法 (Syntax)
var json-object-name = { string : "string value", .......}
例子 (Example)
显示字符串数据类型的示例 -
var obj = {name: 'Amit'}
Boolean
它包括真值或假值。
语法 (Syntax)
var json-object-name = { string : true/false, .......}
例子 (Example)
var obj = {name: 'Amit', marks: 97, distinction: true}
Array
它是有序的值集合。
它们用方括号括起来,这意味着数组以。[开头]。 最后以。] ..
值以(逗号)分隔。
数组索引可以从0或1开始。
当键名是顺序整数时,应该使用数组。
语法 (Syntax)
[ value, .......]
例子 (Example)
示例包含多个对象的示例 -
{
"books": [
{ "language":"Java" , "edition":"second" },
{ "language":"C++" , "lastName":"fifth" },
{ "language":"C" , "lastName":"third" }
]
}
Object
它是一组无序的名称/值对。
对象用大括号括起来,它以“{”开头,以“}”结尾。
每个名称后跟':'(冒号),名称/值对用(逗号)分隔。
键必须是字符串,并且应该彼此不同。
当键名是任意字符串时,应使用对象。
语法 (Syntax)
{ string : value, .......}
例子 (Example)
显示对象的示例 -
{
"id": "011A",
"language": "JAVA",
"price": 500,
}
Whitespace
它可以插在任何一对令牌之间。 可以添加它以使代码更具可读性。 示例显示包含和不包含空格的声明 -
语法 (Syntax)
{string:" ",....}
例子 (Example)
var i = " sachin";
var j = " saurav"
null
这意味着空类型。
语法 (Syntax)
null
例子 (Example)
var i = null;
if(i == 1){
document.write("<h1>value is 1</h1>");
}
else{
document.write("<h1>value is null</h1>");
}
JSON值
它包括 -
- 数字(整数或浮点数)
- string
- boolean
- array
- object
- null
语法 (Syntax)
String | Number | Object | Array | TRUE | FALSE | NULL
例子 (Example)
var i = 1;
var j = "sachin";
var k = null;
JSON - Objects
创建简单对象
可以使用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" : "iowiki.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 Array Object 。 它产生以下结果 -

JSON - Schema
JSON Schema是基于JSON的格式的规范,用于定义JSON数据的结构。 它是根据2011年到期的IETF草案撰写的.JSON Schema -
- 描述您现有的数据格式。
- 清晰,人性化和机器可读的文档。
- 完整的结构验证,对自动化测试很有用。
- 完成结构验证,验证客户提交的数据。
JSON模式验证库
目前有几种验证器可用于不同的编程语言。 目前,最完整和最合规的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(麻省理工学院) |
PHP | php-json-schema(MIT)。 json-schema(伯克利) |
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"]
}
让我们检查一下可以在这个模式中使用的各种重要关键字 -
关键词 | 类型和描述 |
---|---|
$schema | $ schema关键字声明此模式是根据草案v4规范编写的。 |
title | 您将使用它来为您的架构提供标题。 |
description | 对架构的一点描述。 |
type | type关键字定义了我们的JSON数据的第一个约束:它必须是一个JSON对象。 |
properties | 定义要在JSON文件中使用的各种键及其值类型,最小值和最大值。 |
required | 这将保留所需属性的列表。 |
minimum | 这是要对值进行约束并表示最小可接受值。 |
exclusiveMinimum | 如果“exclusiveMinimum”存在且布尔值为true,则实例有效,如果它严格大于“minimum”的值。 |
maximum | 这是要放在值上的约束,表示最大可接受值。 |
exclusiveMaximum | 如果“exclusiveMaximum”存在且布尔值为true,则实例有效,如果它严格低于“maximum”的值。 |
multipleOf | 如果通过此关键字的值对实例进行除法的结果是整数,则数字实例对“multipleOf”有效。 |
maxLength | 字符串实例的长度定义为其最大字符数。 |
minLength | 字符串实例的长度定义为其字符的最小数量。 |
pattern | 如果正则表达式与实例成功匹配,则认为字符串实例有效。 |
您可以在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 - Comparison with XML
JSON和XML是人类可读的格式,并且与语言无关。 它们都支持在现实世界中创建,阅读和解码。 我们可以根据以下因素将JSON与XML进行比较 -
Verbose
XML比JSON更冗长,因此为程序员编写JSON更快。
数组用法
XML用于描述结构化数据,不包括数组,而JSON包含数组。
Parsing
JavaScript的eval方法解析JSON。 应用于JSON时,eval返回描述的对象。
例子 (Example)
XML和JSON的个别示例 -
JSON
{
"company": Volkswagen,
"name": "Vento",
"price": 800000
}
XML
<car>
<company>Volkswagen</company>
<name>Vento</name>
<price>800000</price>
</car>
JSON with PHP
本章介绍如何使用PHP编程语言对JSON对象进行编码和解码。 让我们从准备环境开始,使用PHP for JSON开始编程。
环境 (Environment)
从PHP 5.2.0开始,JSON扩展默认捆绑并编译为PHP。
JSON函数 (JSON Functions)
功能 | 图书馆 |
---|---|
json_encode | 返回值的JSON表示形式。 |
json_decode | 解码JSON字符串。 |
json_last_error | 返回上次发生的错误。 |
在PHP中编码JSON(json_encode)
PHP json_encode()函数用于在PHP中编码JSON。 此函数在成功时返回值的JSON表示,在失败时返回FALSE。
语法 (Syntax)
string json_encode ( $value [, $options = 0 ] )
参数 (Parameters)
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组成。
例子 (Example)
以下示例显示如何使用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类型。
语法 (Syntax)
mixed json_decode ($json [,$assoc = false [, $depth = 512 [, $options = 0 ]]])
参数 Paramaters
json_string - 它是一个编码字符串,必须是UTF-8编码数据。
assoc - 它是一个布尔类型参数,当设置为TRUE时,返回的对象将被转换为关联数组。
depth - 它是一个整数类型参数,指定递归深度
options - 它是JSON解码的整数类型位掩码,支持JSON_BIGINT_AS_STRING。
例子 (Example)
以下示例显示了如何使用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 with Perl
本章介绍如何使用Perl编程语言对JSON对象进行编码和解码。 让我们从准备环境开始,使用Perl for JSON开始编程。
环境 (Environment)
在使用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 Functions)
功能 | 图书馆 |
---|---|
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编码的二进制字符串。
语法 (Syntax)
$json_text = encode_json ($perl_scalar );
or
$json_text = JSON->new->utf8->encode($perl_scalar);
例子 (Example)
以下示例显示了使用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类型。
语法 (Syntax)
$perl_scalar = decode_json $json_text
or
$perl_scalar = JSON->new->utf8->decode($json_text)
例子 (Example)
以下示例显示了如何使用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 with Python
本章介绍如何使用Python编程语言对JSON对象进行编码和解码。 让我们从准备环境开始,使用Python for JSON开始编程。
环境 (Environment)
在开始使用Python编码和解码JSON之前,您需要安装任何可用的JSON模块。 在本教程中,我们已经下载并安装了Demjson ,如下所示 -
$tar xvfz demjson-1.6.tar.gz
$cd demjson-1.6
$python setup.py install
JSON函数 (JSON Functions)
功能 | 图书馆 |
---|---|
encode | 将Python对象编码为JSON字符串表示形式。 |
decode | 将JSON编码的字符串解码为Python对象。 |
在Python中编码JSON(编码)
Python encode()函数将Python对象编码为JSON字符串表示形式。
语法 (Syntax)
demjson.encode(self, obj, nest_level=0)
例子 (Example)
以下示例显示了使用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类型。
语法 (Syntax)
demjson.decode(self, txt)
例子 (Example)
以下示例显示了如何使用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 with Ruby
本章介绍如何使用Ruby编程语言对JSON对象进行编码和解码。 让我们从准备环境开始,使用Ruby for JSON开始编程。
环境 (Environment)
在开始使用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 with Java
本章介绍如何使用Java编程语言对JSON对象进行编码和解码。 让我们从准备环境开始,使用Java for JSON开始编程。
环境 (Environment)
在开始使用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 | ava.lang.Boolean |
null | null |
array | java.util.List |
object | java.util.Map |
在解码时, java.util.List的默认具体类是org.json.simple.JSONObject , 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 with Ajax
AJAX是异步JavaScript和XML,它在客户端用作一组相互关联的Web开发技术,以便创建异步Web应用程序。 根据AJAX模型,Web应用程序可以异步地从服务器发送和检索数据,而不会干扰显示和现有页面的行为。
许多开发人员使用JSON在客户端和服务器之间传递AJAX更新。 更新直播体育比分的网站可以被视为AJAX的一个例子。 如果必须在网站上更新这些分数,则必须将它们存储在服务器上,以便网页可以在需要时检索分数。 这是我们可以使用JSON格式数据的地方。
使用AJAX更新的任何数据都可以使用Web服务器上的JSON格式进行存储。 使用AJAX以便javascript可以在必要时检索这些JSON文件,解析它们并执行以下操作之一 -
将解析后的值存储在变量中,以便在网页上显示之前进行进一步处理。
它直接将数据分配给网页中的DOM元素,以便它们显示在网站上。
例子 (Example)
以下代码显示了带有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.iowiki.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>iowiki.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格式的数据,当我们单击“ Update Detail按钮时,这些数据将异步上载。 该文件保存在http://www.iowiki.com/json/
{"name": "brett", "country": "Australia"}
上面的HTML代码将生成以下屏幕,您可以在其中检查AJAX的运行情况 -
Cricketer Details
名称 | 国家 |
---|---|
萨钦 | 印度 |
当您单击“ Update Detail按钮时,您应该得到如下结果。 如果您的浏览器支持Javascript,您可以自己尝试使用AJAX JSON 。
Cricketer Details
名称 | 国家 |
---|---|
布雷特 | 澳大利亚 |