目录

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对象一章。

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 可以在任何一对令牌之间使用
nullempty

Number

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

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

  • Number中没有使用NaN或Infinity。

下表显示了数字类型 -

S.号 类型和描述
Integer 数字1-9,0和正数或负数
FractionFractions 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
bbackspace
f form feed
nnew line
rcarriage 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 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 Array Object 。 它产生以下结果 -

json数组对象

JSON - Schema

JSON Schema是基于JSON的格式的规范,用于定义JSON数据的结构。 它是根据2011年到期的IETF草案撰写的.JSON Schema -

  • 描述您现有的数据格式。
  • 清晰,人性化和机器可读的文档。
  • 完整的结构验证,对自动化测试很有用。
  • 完成结构验证,验证客户提交的数据。

JSON模式验证库

目前有几种验证器可用于不同的编程语言。 目前,最完整和最合规的JSON Schema验证器是JSV。

语言 图书馆
C WJElement(LGPLv3)
Java json-schema-validator(LGPLv3)
.NETJson.NET (MIT)
ActionScript 3 Frigga (MIT)
Haskell aeson-schema(MIT)
PythonJsonschema
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的
stringjava.lang.String
numberjava.lang.Number
true|falseava.lang.Boolean
nullnull
arrayjava.util.List
objectjava.util.Map

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

以下示例使用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]

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

名称 国家
布雷特
澳大利亚
<上一篇.JSON with Ajax
↑回到顶部↑
WIKI教程 @2018