JSON傳送與接收

原创 2007年03月09日 13:32:00
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物件以進行操作。 

傳送與接收 JSON

from:http://www.openhome.cc/Gossip/JavaScript/JSON.html XML可用來表現階層性資料,然而建立與處理XML DOM較為複雜,在Web應用程式...
  • kendyhj9999
  • kendyhj9999
  • 2015年06月18日 23:29
  • 302

Json对象和Json字符串的区别,以及Springmvc接受json字符串类型。

JSON对象 有时候在做项目的时候时常将这两个概念弄混淆,尤其是在使用springmvc的时候,后台@RequestBody接受的是一个json格式的字符串,一定是一个字符串。 先介绍一下json对...
  • u011848397
  • u011848397
  • 2016年08月05日 17:07
  • 2287

App Inventor (4-1) 透過藍牙傳送訊號給 Arduino

由於智慧型手機的普及,幾乎人人都各自擁有一台,所以我將發一系列教導大家如何將手機與Arduino做結合。 若沒學過java的控制手機怎辦?別擔心,本系列所用的程式語言為appinventor...
  • zgc261
  • zgc261
  • 2014年04月05日 22:59
  • 2524

Spring MVC - 上傳圖片, JSON数据交互 ,RESTful 支持

1.上传图片        springmvc中对多部件(multipart)类型解析,在页面from中提交enctype="multipart/form-data" 的数据时,需要springmv...
  • LABLENET
  • LABLENET
  • 2016年01月08日 10:40
  • 3090

JSON数据的接收

1.总结: java类中传出一个String字符串,经struts.xml 跳转到jsp页面,jsp页面中存放全部JSON内容(如 ${JSON}),然后前台JS获取JSON中的message ...
  • cbjcry
  • cbjcry
  • 2017年04月13日 10:10
  • 1245

使用ajax接收后台发送过来的json数据

今天给大家带来一个简单的使用ajax接收后台返回json格式的demo 废话不多说直接上代码 后台代码 package com.sidan.outjson; import java.io.IOE...
  • sidanchen
  • sidanchen
  • 2016年10月10日 22:43
  • 4842

ASP.NET MVC3如何用JQuery传递数组(集合)类型参数给JsonResult Action

ASP.NET MVC3如何用JQuery传递数组(集合)类型参数给JsonResult Action Edi_Wang 2012-10-16 星期二 22:00 ...
  • niewq
  • niewq
  • 2013年12月29日 23:42
  • 2772

ajax接收json数据到js解析

解决js解析后台返回的list和对象遍历问题
  • white_ice
  • white_ice
  • 2016年09月23日 14:30
  • 5049

SpringMVC 接收页面Post提交的json字符串并解析

json 使用的是ali的fastjson; 页面提交的是json字符串,后台使用@RequestBody String param接收数据,通过json解析param; 页面: ...
  • liangwenmail
  • liangwenmail
  • 2016年08月15日 21:47
  • 14772

Servlet和JSON传送与接收

http://it.chinawin.net/softwaredev/article-d431.html 在 JSON 中我们已经介绍过其基本格式,与XML相同,JSON只是一个文字格式,只...
  • kendyhj9999
  • kendyhj9999
  • 2015年04月18日 12:27
  • 3020
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JSON傳送與接收
举报原因:
原因补充:

(最多只允许输入30个字)