JSON 快速指南



JSON - 概述

JSON(JavaScript 对象表示法)是一种轻量级的基于文本的开放标准,旨在用于人类可读的数据交换。JSON 使用的约定为程序员所熟知,包括 C、C++、Java、Python、Perl 等。

  • JSON 代表 JavaScript 对象表示法。

  • 该格式由 Douglas Crockford 指定。

  • 它被设计用于人类可读的数据交换。

  • 它扩展自 JavaScript 脚本语言。

  • 文件名扩展名为 .json

  • JSON Internet 媒体类型为 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 example demo

有关 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

布尔值

true 或 false

4

数组

值的顺序序列

5

它可以是字符串、数字、true 或 false、null 等

6

对象

键值对的无序集合

7

空白

可以在任何一对标记之间使用

8

null

数字

  • 它是 JavaScript 中的双精度浮点格式,它取决于实现。

  • 不使用八进制和十六进制格式。

  • 数字中不使用 NaN 或 Infinity。

下表显示了数字类型 −

序号 类型和描述
1

整数

数字 1-9、0 和正数或负数

2

分数

像 .3、.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

b

退格

5

f

换页

6

n

换行

7

r

回车

8

t

水平制表符

9

u

四个十六进制数字

语法

var json-object-name = { string : "string value", .......}

示例

显示字符串数据类型的示例 −

var obj = {name: 'Amit'}

布尔值

它包括 true 或 false 值。

语法

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

它表示空类型。

语法

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 对象。它会产生以下结果 −

Json Objects

创建数组对象

以下示例显示了使用 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 array objects

JSON - 模式

JSON 模式是基于 JSON 的格式的规范,用于定义 JSON 数据的结构。它是在 IETF 草案下编写的,该草案于 2011 年过期。JSON 模式 −

  • 描述您现有的数据格式。
  • 清晰、易于阅读的人机可读文档。
  • 完整的结构验证,可用于自动化测试。
  • 完整的结构验证,验证客户端提交的数据。

JSON 模式验证库

目前有几种可用于不同编程语言的验证器。目前可用的最完整和最符合 JSON 模式的验证器是 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": "https://json-schema.fullstack.org.cn/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

$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,则如果实例严格小于 "maximum" 的值,则该实例有效。

11

multipleOf

如果将实例除以此关键字的值的结果为整数,则数值实例对 "multipleOf" 有效。

12

maxLength

字符串实例的长度定义为其字符的最大数量。

13

minLength

字符串实例的长度定义为其字符的最小数量。

14

pattern

如果正则表达式成功匹配实例,则字符串实例被认为有效。

您可以查看 https://json-schema.fullstack.org.cn 以获取可在定义 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 中并编译到 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()` 函数用于解码 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 使用此函数的真值,以便 Perl 可以使用对象的类的 TO_JSON 方法将对象转换为 JSON。

在 Perl 中编码 JSON (encode_json)

Perl 的 `encode_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
};

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 (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}

Ruby 中使用 JSON

本章介绍如何使用 Ruby 编程语言编码和解码 JSON 对象。让我们从准备 Ruby JSON 编程环境开始。

环境

在使用 Ruby 编码和解码 JSON 之前,您需要安装任何可用的 Ruby JSON 模块。您可能需要安装 Ruby gem,但如果您运行的是最新版本的 Ruby,那么您的机器上一定已经安装了 gem,否则,假设您已经安装了 gem,让我们按照以下单个步骤操作:

$gem install json

使用 Ruby 解析 JSON

以下示例显示前两个键保存字符串值,后三个键保存字符串数组。让我们将以下内容保存在名为 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
字符串 java.lang.String
数字 java.lang.Number
true|false java.lang.Boolean
null null
数组 java.util.List
对象 java.util.Map

解码时,java.util.List 的默认具体类是 org.json.simple.JSONArrayjava.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

以下示例使用了 JSONObjectJSONArray,其中 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]

Ajax 中使用 JSON

AJAX 是异步 JavaScript 和 XML,它在客户端用作一组相互关联的 Web 开发技术,用于创建异步 Web 应用程序。根据 AJAX 模型,Web 应用程序可以异步地向服务器发送和检索数据,而不会干扰现有页面的显示和行为。

许多开发人员使用 JSON 在客户端和服务器之间传递 AJAX 更新。更新实时体育比分的网站可以被认为是 AJAX 的一个例子。如果这些分数必须在网站上更新,则必须将它们存储在服务器上,以便网页在需要时可以检索分数。这就是我们可以使用 JSON 格式化数据的地方。

使用 AJAX 更新的任何数据都可以使用 JSON 格式存储在 Web 服务器上。使用 AJAX,JavaScript 可以根据需要检索这些 JSON 文件,解析它们,并执行以下操作之一:

  • 将解析后的值存储在变量中,以便在将它们显示在网页上之前进行进一步处理。

  • 它直接将数据分配给网页中的 DOM 元素,以便它们显示在网站上。

示例

以下代码显示了 AJAX 中的 JSON。将其保存为 ajax.htm 文件。这里异步加载 JSON 数据使用的是 loadJSON() 函数。

<html>
   <head>
      <meta content = "text/html; charset = ISO-8859-1" http-equiv = "content-type">
		
      <script type = "application/javascript">
         function loadJSON() {
            var data_file = "https://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 格式的数据,当我们单击“更新详情”按钮时,将异步上传这些数据。此文件保存在 https://tutorialspoint.com/json/

{"name": "Brett", "country": "Australia"}

上面的 HTML 代码将生成以下屏幕,您可以在其中检查 AJAX 的实际效果:

板球运动员详情

姓名 国家
萨钦
印度

单击“更新详情”按钮时,您应该得到类似如下结果。您可以自己尝试 AJAX 中的 JSON,前提是您的浏览器支持 Javascript。

板球运动员详情

姓名 国家
布雷特
澳大利亚
广告