在 JSON 中我們已經介紹過其基本格式,與XML相同,JSON只是一個文字格式,只要客戶端與伺服端可以剖析它,就可以利用它作為傳送資料的格式,但它是JavaScript的核心特性之一,所以在JavaScript中使用JSON作為資料格式很方便,您還可以在 http://www.json.org/ 找到處理JSON的程式庫,包括客戶端JavaScript library與伺服端的library。

相較於XML,JSON在資料表示時更為簡潔,例如一個表示帳戶的資料,XML中可能如下表示:

<account>
<number>123456</number>
<name>Justin</name>
<balance>1000</balance>
</account>

而使用JSON可以這麼表示:

var account = {
number : "123456",
name: "Justin",
balance: "1000"
};

您可以下載 http://www.json.org/json.js ,並將之加入至網頁之中:

<script type="text/javascript" src="json.js"></script>

json.js 中有JSON parser與JSON stringifier,例如它擴充了物件,增加了toJSONString()函式,您可以直接如下傳回物件的JSON表示法:

function Account(number, name, balance) {
    this.number = number;
    this.name = name;
    this.balance = balance;
}

var account = new Account(123456, "Justin", 1000);
alert(account.toJSONString());

您可以按下 執行範例 觀看結果。

您可以把JSON表示法以POST發送至伺服端,例如:

  • HandleJSONEx-2.js
var xmlHttp;

function createXMLHttpRequest() {
if(window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
else if(window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}

function prepareJSON() {
var number = document.getElementById("num").value;
var name = document.getElementById("name").value;
var balance = document.getElementById("bal").value;

var account = new Object();
account.number = number;
account.name = name;
account.balance = balance;

return account.toJSONString();
}

function handleAccount() {var json = prepareJSON();
var url = "JSONServlet?timeStamp" + new Date().getTime();
createXMLHttpRequest();
xmlHttp.onreadystatechange = handleStateChange;    xmlHttp.open("POST", url);    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");    xmlHttp.send(json);
}

function handleStateChange() {
if(xmlHttp.readyState == 4) {
if(xmlHttp.status == 200) {
document.getElementById("response").innerHTML = xmlHttp.responseText;
}
}
}

這個程式使用者輸入的帳號資訊包裝為物件,並使用JSON擴充的toJSONString()將之轉換為JSON格式,之後POST至伺服端,伺服端可以至 JSON in Java 下載JSON伺服端的Parser,您可以撰寫以下的程式:

  • JSONServlet.java
package onlyfun.caterpillar;

import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.*;

public class JSONServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
public JSONServlet() {
super();
}    

protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String json = readJSONString(request);

JSONObject jsonObject = null;
String responseText = null;
try {
jsonObject = new JSONObject(json);
responseText = "帳號 " + jsonObject.getString("number") + "<br/> 名稱 "
+ jsonObject.getString("name") + "<br/> 餘額 " + jsonObject.getString("balance");
}
catch (JSONException e) {
e.printStackTrace();
}

response.setCharacterEncoding("UTF-8");
response.setContentType("text/xml");
response.getWriter().print(responseText);
}   

private String readJSONString(HttpServletRequest request){
StringBuffer json = new StringBuffer();
String line = null;
try {
BufferedReader reader = request.getReader();
while((line = reader.readLine()) != null) {
json.append(line);
}
}
catch(Exception e) {
System.out.println(e.toString());
}
return json.toString();
}
}

這個Servlet剖析JSON,並將資料取出後再傳回文字回應。

如果將JSON字串傳回給客戶端瀏覽器,則可以使用eval()將之運算為一個JavaScript物件以進行操作。

转载于:https://www.cnblogs.com/tlnature/archive/2009/02/19/1393765.html

json接收与发送(转自csdnblog)相关推荐

  1. python3.6串口编程实例_Python3 串口接收与发送16进制数据包的实例

    Python3 串口接收与发送16进制数据包的实例 如下所示: import serial import string import binascii s=serial.Serial('com4',9 ...

  2. 利用postman完成JSON串的发送功能(springboot)

    postman简介: postman工具是用来做网络接口测试的,用它来模拟网络请求,上传数据,然后得到后台项目返回的响应.Postman可以模拟表单提交,也能模拟Ajax请求,测试网络接口变得非常容易 ...

  3. C语言实现ifconfig获取网卡接收和发送流量统计

    在Windows下我们可以利用ipconfig命令获取网卡的相关信息,在Linux下命令是ifconfig 我们可以获取的信息更为丰富,其中包括网卡接收和发送的流量,用C语言实现这个命令并不是一件简单 ...

  4. DBus glib 各数据类型接收与发送详解—C语言(3)

    DBus glib 各数据类型接收与发送详解-C语言(3) 动机 前置知识 正文 Python 测试服务 使用 C 实现复杂数据类型的传递 DICT_DICT ObjectPath_Dict_Stru ...

  5. WebRTC Audio 接收和发送的关键过程

    本文基于 WebRTC 中的示例应用 peerconnection_client 分析 WebRTC Audio 接收和发送的关键过程.首先是发送的过程,然后是接收的过程. 创建 webrtc::Au ...

  6. C# message简单实现窗口间信息接收与发送

    刚接触windows 不同程序 窗口消息传递,不理解IntPtr SendMessage(int hWnd, int msg, IntPtr wParam, IntPtr lParam)这函数怎么用? ...

  7. 来自网页的消息服务器繁处理忙,EventSource 对象用于接收服务器发送事件通知,是网页自动获取来自服务器的更新...

    //--------------------------------客户端代码----------------------------- if(typeof(EventSource) !== &quo ...

  8. java使用Socket类接收和发送数据

    java使用Socket类接收和发送数据 网络应用分为客户端和服务端两部分,而Socket类是负责处理客户端通信的Java类.通过这个类可以连接到指定IP或域名的服务器上,并且可以和服务器互相发送和接 ...

  9. 中移4G模块-ML302-OpenCpu开发-(MQTT连接阿里云-接收和发送数据)

    B站:https://space.bilibili.com/309103931 中移4G模块-ML302专栏:https://blog.csdn.net/qq_33259323/category_10 ...

最新文章

  1. Nagios监控笔记上
  2. mysql 单例模式好处_PHP单例模式的优点分析
  3. 公司的实战Replica Sets+Sharding方案
  4. csrutil是什么_经常在程序里见到 Util ,想知道它一般是指什么意思?
  5. FindInSet性能优化
  6. 程序员漫画:别人眼中的程序员vs真实的程序员
  7. java标识符_Java标识符的简单介绍
  8. URAL 1992 CVS 可持久化链栈
  9. c#中Split用法总结
  10. 计算机主板光驱插口,如何查看笔记本光驱位和主板的SATA接口版本
  11. linux svn cleanup 用法,svn操作-clean up死循环
  12. 32位计算机装64位操作系统,电脑装32位还是64位系统与硬件有关系吗
  13. 上海小伙三次成功创业,资产达上十亿被称为“创业神童”
  14. 鸟瞰Atlassian认证
  15. 一键生成sprite(雪碧图)以及 动态加载1X 2X3X 图片
  16. 1005:地球人口承载力估计(c++)
  17. csp 2022 总结
  18. 芋道 Spring Cloud Alibaba 介绍
  19. 基于python机器学习深度学习实现股市评论情感分析 (完整代码+数据集可直接运行)
  20. vscode更新之后rg.exe占用cpu过高

热门文章

  1. ECCV 2020,一种灵活高效的权重生成网络框架
  2. 程序员,互联网创业者,忠言逆耳,希望创业者们慎重,三思而后行。
  3. 前沿 | NVIDIA PyTorch库让3D深度学习研究更简单!
  4. 转载一个pythonA*实现
  5. 保存时间 默认_操作技能|WORD文档没保存,有办法恢复吗?
  6. java压栈重复字符串_Java 实例 – 压栈出栈的方法实现字符串反转
  7. Dubbo3.0 简介
  8. python多线程没有java_Java 多线程启动为什么调用 start() 方法而不是 run() 方法?...
  9. 根据id获取多维数组路径_clickhouse数据模型之用户路径分析
  10. 软考高级网络规划设计师5天修炼