Chủ Nhật, 5 tháng 10, 2014


SOAP – Simple Object Access Protocol

SOAP – Một tiêu chuẩn của W3C,  là giao thức sử dụng XML để định nghĩa dữ liệu dạng thuần văn bản (plain text) thông qua HTTP. SOAP là cách mà  Web Service sử dụng để truyền tải dữ liệu. Vì dựa trên XML nên SOAP là một giao thức không phụ thuộc platform cũng như bất kì ngôn ngữ lập trình nào.
Một thông điệp SOAP được chia thành hai phần là header và body. Phần header chỉ ra địa chỉ Web Service, host, Content-Type, Content-Length tương tự như một thông điệp HTTP.
Khi tạo một dự án Web Service, mặc định Web Visual Develop sẽ tạo cho bạn phương thức HelloWorld() sau:
public string HelloWorld()
{
    return "Hello World";
}
Một HTTP Request sẽ có dạng sau:
POST /MathService.asmx/HelloWorld HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: length

RESTful Web services

REST định nghĩa các quy tắc kiến trúc để bạn thiết kế Web services chú trọng vào tài nguyên hệ thống, bao gồm các trạng thái tài nguyên được định dạng như thế nào và được chuyển tải qua HTTP thông qua số lượng lớn người dùng và được viết bởi những ngôn ngữ khác nhau. Nếu tính theo số dịch vụ mạng sử dụng, REST đã nổi lên trong vài năm qua như là một mô hình thiết kế dịch vụ chiếm ưu thế. Trong thực tế, REST đã có những ảnh hưởng lớn và gần như thay thế SOAP và WSDL vì nó đơn giản và dễ sử dụng hơn rất nhiều.
REST không thu hút được nhiều sự chú ý khi lần đầu tiên giới thiệu vào năm 2000 bởi Roy Fielding trong luận án của ông "Architectural Styles and the Design of Network-based Software Architectures" (Phong cách kiến trúc và thiết kế kiến trúc phần mềm dựa trên mạng) tại Đại học California. Luận án đã phân tích một loạt các nguyên tắc kiến trúc phần mềm sử dụng Web như là một nền tảng tính toán phân tán (xem Tài nguyên liên kết tới luận án). Đến nay, vài năm sau đó, đã xuất hiện các framework chủ đạo cho REST và chúng vẫn đang được tiếp tục phát triển, nó đang được xem xét để đưa vào trong bộ Java™ 6 thông qua tiêu chuẩn JSR-311. 
Bài viết này chỉ ra rằng khi REST được biết đến nhiều hơn thì việc cụ thể hóa một Web service REST sẽ tuân thủ theo bốn nguyên tắc thiết kế cơ bản sau:
  • Sử dụng các phương thức HTTP một cách rõ ràng
  • Phi trạng thái
  • Hiển thị cấu trúc thư mục như URls
  • Chuyển đổi JavaScript Object Notation (JSON) và XML hoặc cả hai.
Các phần sau đây sẽ mở rộng dựa trên bốn nguyên lý này và đề xuất một nhân tố kỹ thuật cơ bản giải thích vì sao chúng quan trọng đối với các nhà thiết kế dịch vụ mạng REST. 

Sử dụng các phương thức HTTP một cách rõ ràng

Một đặc tính quan trọng của dịch Web service RESTful là sử dụng một cách rõ ràng các phương thức HTTP theo cách một giao thức được xác định bởi RFC 2616. Ví dụ HTTP GET được xác định như là một phương thức sinh ra số liệu được sử dụng có chủ đích bởi các ứng dụng người dùng để thu thập tài nguyên, dữ liệu từ một máy chủ, hoặc thực thi một truy vấn mà máy chủ sẽ tìm kiếm và phản hồi cùng với một gói thông tin tương thích.
REST yêu cầu các nhà phát triển sử dụng phương thức HTTP một cách rõ ràng theo cách tương thích với giao thức chuẩn. Nguyên lý thiết kế REST cơ bản này thiết lập một ánh xạ 1-1 giữa các hành động tạo, đọc, cập nhật và xoá (CRUD) các quá trình vận hành và các phương thức HTTP. Theo cách ánh xạ này thì:
  • Để tạo một tài nguyên trên máy chủ, bạn cần sử dụng phương thức POST.
  • Để truy xuất một tài nguyên, sử dụng GET.
  • Để thay đổi trạng thái một tài nguyên hoặc để cập nhật nó, sử dụng PUT.
  • Để huỷ bỏ hoặc xoá một tài nguyên, sử dụng DELETE.
Một lỗ hổng trong thiết kế vốn có trong các Web API là việc sử dụng các phương thức HTTP mà không có mục đích trước. Ví dụ lệnh URI trong một lệnh HTTP GET thường xác định một tài nguyên cụ thể. Hoặc một chuỗi truy vấn trong một lệnh URI bao gồm một nhóm các tham số xác định tiêu chí tìm kiếm được máy chủ sử dụng để tìm các tài nguyên phù hợp. Ít nhất điều này cho thấy HTTP/1.1 miêu tả GET như thế nào. Nhưng có nhiều trường hợp Web APIs không được tốt lắm, do sử dụng HTTP GET để khởi động một vài tác vụ trên máy chủ — ví dụ, thêm các bản ghi vào một cơ sở dữ liệu. Trong các trường hợp này, phương thức GET-yêu-cầu-URI đã không được sử dụng đúng đắn hoặc chưa sử dụng đầy đủ. Nếu Web API sử dụng GET để tiến hành các thủ tục ra lệnh từ xa thì nó sẽ có dạng như sau:

GET /adduser?name=Robert HTTP/1.1
Đây không phải là mẫu thiết kế hấp dẫn vì phương pháp nói trên hỗ trợ phương thức thay đổi trạng thái trên HTTP GET. Nói cách khác, phương thức yêu cầu HTTP GET nói trên có những tác động phụ. Nếu được xử lý thành công, kết quả của yêu cầu (trong ví dụ này) là để tạo thêm một người dùng mới vào kho dữ liệu. Vấn đề ở đây chỉ về mặt ngữ nghĩa. Các Web server được thiết kế để phản hồi lại các yêu cầu HTTP GET bằng cách truy vấn dữ liệu phù hợp với đường dẫn (hoặc câu truy vấn) theo URI và phản hồi những dữ liệu này hoặc những thông tin đại diện, chứ không phải để thêm một dữ liệu vào database. Từ góc độ mục đích sử dụng giao thức đó và theo tiêu chuẩn Web server HTTP/1.1 thì việc sử dụng GET theo cách này tồn tại mâu thuẫn.
Về mặt ngữ nghĩa, có nhiều vấn đề khi sử dụng GET là để khởi động một sự xoá bỏ, sửa đổi, hoặc ghi thêm vào cơ sở dữ liệu, hoặc để thay đổi trạng thái máy chủ theo một cách nào đó. Nó dùng các công cụ Web cache (các đường dẫn) và các công cụ tìm kiếm để làm thay đổi máy chủ một cách không chủ định thông qua đường dẫn. Một cách đơn giản để vượt qua vấn đề hay xảy ra này là di chuyển tên và giá trị các tham số yêu cầu trên URI vào các thẻ XML. Các thẻ kết quả, một đại diện XML của một chủ thể được tạo ra, có thể được gửi vào một nhóm HTTP POST, những nơi mà yêu cầu URI là chủ thể sinh ra có chủ đích (xem ví dụ 1 và 2).
Ví dụ 1. Trước
GET /adduser?name=Robert HTTP/1.1
Ví dụ 2. Sau
POST /users HTTP/1.1
Host: myserver
Content-Type: application/xml
<?xml version="1.0"?>
<user>
  <name>Robert</name>
</user>
Phương pháp trên là ví dụ của yêu cầu RESTful: sử dụng đúng HTTP POST và bao gồm cả tải trọng trong phần thân câu lệnh. Đối với phía đầu tiếp nhận, câu lệnh có thể được xử lý bằng cách thêm tài nguyên vào hệ thống đó như một phần tài nguyên phụ được định dạng trong lệnh URI; trong trường hợp này tài nguyên mới phải được thêm vào như là một nhánh con của /users. Quan hệ bao hàm giữa thực thể mới và nhánh cha, như đã xác định trong yêu cầu POST, tương tự như cách tệp đã thuộc thư mục cha. Máy khách thiết lập quan hệ giữa thực thể và nhánh cha, và xác định URI của thực thể mới trong yêu cầu POST. 
Ứng dụng máy khách sau đó có thể nhận kết nối của nguồn sử dụng URI mới, lưu ý rằng ít nhất về mặt logic, nguồn được đặt dưới /users, như trong ví dụ 3.
Ví dụ 3. Lệnh HTTP GET
GET /users/Robert HTTP/1.1
Host: myserver
Accept: application/xml
Sử dụng GET theo cách này rất rõ ràng vì GET chỉ dành cho truy cập dữ liệu. GET là một phương thức mà không có hiệu ứng phụ, như là một đặc tính riêng không thay đổi giá trị.
Tương tự, những thay đổi của phương thức Web cũng cần được ứng dụng trong các trường hợp khi một thao tác cập nhật được hỗ trợ qua HTTP GET, như thể hiện trong ví dụ 4.
Ví dụ 4. Thực hiện lệnh Cập nhật thông qua HTTP GET
GET /updateuser?name=Robert&amp;newname=Bob HTTP/1.1
Câu lệnh này thay đổi thuộc tính (hoặc đặc tính) name của dữ liệu. Có thể dùng chuỗi truy vấn (query) để dùng cho những thao tác như thế này, và ví dụ 4 là một ví dụ đơn giản, mẫu phương-pháp-dấu-hiệu-như-là-chuỗi-truy-vấn (query-string-as-method-signature) có thể không hoạt động khi sử dụng đối với các thao tác phức tạp hơn. Do mục tiêu của chúng ta là làm rõ việc sử dụng các phương thức HTTP, nên cách tiếp cận RESTful là gửi một yêu cầu HTTP PUT để cập nhật tài nguyên, thay vì HTTP GET, cho những lý do tương tự chỉ ra ở trên (xem ví dụ 5).
Ví dụ 5. Lệnh HTTP PUT
PUT /users/Robert HTTP/1.1
Host: myserver
Content-Type: application/xml
<?xml version="1.0"?>
<user>
  <name>Bob</name>
</user>
Sử dụng PUT để thay đổi dữ liệu gốc, cho thấy cách làm rõ ràng hơn, phù hợp với các nguyên lý của REST và các khái niệm của các phương thức HTTP. Lệnh PUT trong ví dụ 5 rõ ràng ở chỗ nó chỉ ra dữ liệu được cập nhật bằng cách xác định nó trong câu lệnh URI, và nó chuyển một đại diện mới của các thuộc tính dữ liệu cần chuyển đổi như là nhóm không chặt chẽ các tên tham số và giá trị trên lệnh URI. Ví dụ 5 cũng có hiệu ứng từ việc đổi tên tài nguyên từ Robert sang Bob, và trong việc các thay đổi của URI sang /users/Bob. Trong một dịch vụ mạng REST, lệnh tiếp theo của tài nguyên sử dụng URI cũ sẽ sinh ra lỗi căn bản 404 Not Found. 
Như là một nguyên tắc thiết kế chung, nó giúp theo sát các hướng dẫn sử dụng REST để sử dụng các phương pháp HTTP một cách rõ ràng bằng cách sử dụng các danh từ trong URIs thay vì động từ. Trong một Web service RESTful, các động từ — POST, GET, PUT, và DELETE — đã được định nghĩa bởi giao thức. Và tốt nhất, để giữ giao diện được khái quát hoá và cho phép người dùng hiểu rõ các thao tác mà họ gọi thì Web service không nên đưa ra nhiều động từ hoặc các thủ tục remote từ xa, như /adduser hoặc /updateuser. Nguyên tắc thiết kế chung này cũng áp dụng đối với phần thân câu lệnh HTTP, được sử dụng có chủ ý để chuyển trạng thái tài nguyên, không mang tên của một phương thức hay thủ tục remote từ xa.


                 JSON


JSON: Tạm dịch là: ký hiệu đối tượng JavaScript (JavaScript Object Notation)
JSON là cú pháp để lưu trữ và trao đổi thông tin văn bản. Cũng giống như XML.

JSON là nhỏ hơn so với XML, và nhanh hơn và dễ dàng hơn để phân tích (parse).
Ví dụ JSON:
Mã:
{
 "employees": [
  { "firstName":"John" , "lastName":"Doe" }, 
  { "firstName":"Anna" , "lastName":"Smith" }, 
  { "firstName":"Peter" , "lastName":"Jones" }
 ]
}
JSON là gì?
  • JSON là viết tắt của JavaScript Object Notation
  • JSON là định dạng trao đổi dữ liệu văn bản dung lượng nhẹ
  • JSON là ngôn ngữ độc lập *
  • JSON được "tự mô tả" và dễ hiểu
(*) JSON sử dụng cú pháp JavaScript để mô tả đối tượng dữ liệu, nhưng JSON là ngôn ngữ và nền tảng độc lập. Trình phân tích cú pháp(parsers) JSON và các thư viện JSON tồn tại cho nhiều ngôn ngữ lập trình khác nhau.
Đối tượng employees là 1 mảng của 3 đối tượng employee.

JSON - Đánh giá đối tượng JavaScript

Các định dạng văn bản JSON có cú pháp giống hệt cú pháp của JavaScript.

Bởi vì sự tương đồng này, thay vì sử dụng một trình phân tích cú pháp(parser), một chương trình JavaScript có thể sử dụng hàm xây dựng sẵn (built-in) là hàm eval() và thực thi các dữ liệu JSON để sinh ra các đối tượng thuần JavaScript.

JSON là gì? JSON làm việc như thế nào - Phần 2

JSON - Giới thiệu

Ví dụ JSON:
HTML Code:
<html>
 <body>
  <h2>JSON Object Creation in JavaScript</h2>
  <p>
   Name: <span id="jname"></span><br /> 
   Age: <span id="jage"></span><br /> 
   Address: <span id="jstreet"></span><br /> 
   Phone: <span id="jphone"></span><br /> 
  </p>
  <script type="text/javascript">
   var JSONObject= {
    "name":"John Johnson",
    "street":"Oslo West 555", 
    "age":33,
    "phone":"555 1234567"
   };
   document.getElementById("jname").innerHTML=JSONObject.name 
   document.getElementById("jage").innerHTML=JSONObject.age 
   document.getElementById("jstreet").innerHTML=JSONObject.street 
   document.getElementById("jphone").innerHTML=JSONObject.phone 
  </script>

 </body>
</html>
________________________________________
Giống như XML
  • JSON là văn bản trơn (không có định dạng(màu sắc, cỡ chữ,…))
  • JSON là "tự mô tả" (người dùng có thể hiểu được)
  • JSON là phân cấp (có cấu trúc cây)
  • JSON có thể được phân tích cú pháp (parse) bởi JavaScript
  • Dữ liệu JSON có thể được truyền đi bằng AJAX
________________________________________
Không giống như XML
  • Không có thẻ kết thúc
  • Ngắn hơn
  • Nhanh hơn để đọc và ghi
  • Có thể được phân tích cú pháp bằng hàm dựng sẵn trong JavaScript là eval ()
  • Sử dụng mảng (Array)
  • Không dùng các từ reserve
________________________________________
Tại sao dùng JSON?
For AJAX applications, JSON is faster and easier than XML:
Sử dụng XML
  • Lấy một tài liệu XML
  • Sử dụng XML DOM để lặp qua tài liệu
  • Trích xuất các giá trị và lưu trữ trong các biến
Sử dụng JSON
  • Lấy một chuỗi JSON
  • Dùng hàm eval () chuyển chuỗi JSON thành đối tượng JavaScript

JSON là gì? JSON làm việc như thế nào - Phần 3

Cú pháp JSON 

Cú pháp JSON là một tập hợp con của cú pháp JavaScript

Các quy luật cú pháp JSON 

Cú pháp JSON là một tập hợp con của cú pháp đối tượng JavaScript.
  • Dữ liệu là các cặp tên/giá trị (name/values)
  • Dữ liệu được phân cách bằng dấu phẩy
  • Đối tượng nằm trong cặp ngoặc nhọn ‘{}’
  • Dấu ngoặc vuông giữ mảng ‘[]’

Cặp Tên/Giá trị của JSON

Dữ liệu JSON được viết trong cặp Tên/Giá trị.
Một cặp Tên/Giá trị chứa tên 1 trường (trong dấu nháy đôi “”), theo sau là dấu phẩy, cuối cùng là giá trị:
Mã:
"firstName" : "John"
Cú pháp này khá dễ hiểu, và tương đương với lệnh JavaScript sau:
Mã:
firstName = "John"
________________________________________
Các giá trị của JSON
Giá trị (value) JSON có thể là:
  • 1 số (nguyên (integer) hay số thực (floating point))
  • 1 chuỗi (nằm trong dấu nháy đôi “”)
  • 1 số luận lý (true or false)
  • 1 mảng (nằm trong dấu ngoặc vuông [])
  • 1 đối tượng (nằm trong dấu ngoặc nhọn {})
  • Kiểu null
________________________________________
Các đối tượng JSON

Các đối tượng được đặt trong dấu ngoặc nhọn {}
Đối tượng có thể chứa nhiều cặp Tên/Giá trị (Name/Values):
Mã:
{ "firstName":"John" , "lastName":"Doe" }
Và tương đương với lệnh JavaScript sau:
Mã:
firstName = "John"
lastName = "Doe"
________________________________________
Mảng của JSON
Mảng JSON nằm trong dấu ngoặc vuông [].
1 mảng có thể chứa nhiều đối tượng:
Mã:
{
 "employees": [
  { "firstName":"John" , "lastName":"Doe" }, 
  { "firstName":"Anna" , "lastName":"Smith" }, 
  { "firstName":"Peter" , "lastName":"Jones" }
 ]
}
Trong ví dụ trên, đối tượng “employees” là 1 mảng chứa 3 đối tượng. mỗi đối tượng là 1 record của person (với 1 ‘first name và’ 1 ‘last name’).
________________________________________
JSON sử dụng cú pháp JavaScript
Bởi vì JSON sử dụng cú pháp JavaScript, nên không cần 1 chương trình trung gian làm việc giữ JSON và JavaScript.
Với JavaScript bạn có thể tạo 1 mảng các đối tượng và gán dữ liệu như sau:

Ví dụ:
Mã:
var employees = [
 { "firstName":"John" , "lastName":"Doe" }, 
 { "firstName":"Anna" , "lastName":"Smith" }, 
 { "firstName":"Peter" , "lastName": "Jones" }
];
Dòng đầu tiên trong mảng đối tượng JavaScript có thể được truy cập như sau:
Mã:
employees[0].lastName;
Kết quả:
Mã:
Doe
Dữ liệu mới được gán như sau:
Mã:
employees[0].lastName = "Jonatan";
Trong phần 4, tui sẽ chỉ cách chuyển chuỗi JSON qua đối tượng JavaScript.
________________________________________
JSON Files
  • Kiểu file của JSON là ".json"
  • Kiểu MIME của JSON là "application/json"

 JSON là gì? JSON làm việc như thế nào - Phần 4

JSON hoạt động?
________________________________________
Convert chuỗi JSON thành đối tượng JavaScript

Với JSON, để lấy dữ liệu JSON từ web server (như 1 file hay 1 HttpRequest), convert dữ liệu JSON thành đối tượng JavaScript, và sử dụng dữ liệu này trong trang web
Sau đây là demo:
________________________________________
Ví dụ JSON – Tạo Object từ Chuỗi (String)

Đầu tiên, tạo 1 chuỗi JavaScript chứa cú pháp JSON:
Mã:
var txt = '{ "employees" : [' +
'{ "firstName":"John" , "lastName":"Doe" },' +
'{ "firstName":"Anna" , "lastName":"Smith" },' +
'{ "firstName":"Peter" , "lastName":"Jones" } ]}';
Kể từ khi cú pháp JSON là tập con của cú pháp JavaScript, hàm JavaScript eval() có thể convert chuỗi JSON thành đối tượng JavaScript.
Hàm eval() sử dụng trình biên dịch(compiler) JavaScript sẽ phân tích cú pháp(parse) chuỗi JSON và sinh ra đối tượng JavaScript. Chuỗi phải được bọc trong dấu ngoặc ‘()’ để tránh lỗi cú pháp:
Mã:
var obj = eval ("(" + txt + ")");
Cuối cùng là việc sử dụng đối tượng JavaScript trong trang web như sau:

Mã:
<p>
First Name: <span id="fname"></span><br /> 
Last Name: <span id="lname"></span><br /> 
</p> 

<script type="text/javascript">
document.getElementById("fname").innerHTML = obj.employees[1].firstName 
document.getElementById("lname").innerHTML = obj.employees[1].lastName 
</script>
________________________________________
JSON Parser

Sẽ an toàn hơn để sử dụng JSON Parser để convert chuỗi JSON thành đối tượng JavaScript. 1 JSON Parser sẽ nhận dạng chỉ chuỗi JSON và không biên dịch các script khác.

Trong trình duyệt có hỗ trợ mặc định cho JSON, thì JSON sẽ được parse nhanh hơn.
Thông thường thì các trình duyệt mới đều hỗ trợ mặc định cho JSON và trong chuẩn ECMAScript (JavaScript) mới nhất.

Web Browsers Support
  • Firefox (Mozilla) 3.5
  • Internet Explorer 8
  • Chrome
  • Opera 10
  • Safari 4
Web Software Support
  • jQuery
  • Yahoo UI
  • Prototype
  • Dojo
  • ECMAScript 1.5
Thầy cũng đang dạy phần này. Hay lắm bạn. Mình có 1 số thắc mắc sau:
- Nếu sử dụng = javascript thì tính bảo mật ntn vì javascript là ngôn ngữ client, và nếu người dùng tắt javascript thì sao.
- Ví dụ của bạn được sử dụng trên cùng 1 file. Vậy nếu muốn tạo ra dữ liệu chung để cùng sử dụng thì ntn? như 1 file xml thì có thể gọi sử dụng bất kỳ lúc nào và ko phụ thuộc
- Khi muốn thêm dữ liệu vào database thì phải thông qua ajax để truyền vào php -> database hay sao.

---Thư viện php có hàm json_encode($arrayPhp) và json_decode($arrayPhp),Ví dụ :
PHP Code:
$arrayPhp=array("1"=>"ga","2"=>"vit","3"=>"ngan","4"=>"ngong"); $encode json_encode($arrayPhp);
echo 
$encode//out put {"1":"ga","2":"vit","3":"ngan","4":"ngong"} $decode=json_decode($encode);
echo 
"<pre>";
    
print_r($decode);
echo 
"</pre>";  /*out put stdClass Object
(
    [1] => ga
    [2] => vit
    [3] => ngan
    [4] => ngong
)*/  
Ta thấy hàm json_encode() chuyển đổi mảng thành dạng json,còn json_decode thì ngược lại chuyển dạng json thành mảng
==>dựa vào đó ta dễ dàng sử dụng chuyển đổi qua lại giữa dữ liệu giữa json và php
---Json có thể sử dụng trong ajax thuần hay trong jquery gọi tới 1 trang php cách dễ dàng,nhưng kiểu dữ liệu ở dạng json

Q cũng chưa thấy hết sức mạnh của JSON.
Chỉ có Javascript mới thao tác trực tiếp file json. PHP muốn xử lý thì phải nhờ AJAX, JQuery truyền dữ liệu JSON lên Web server.

Hiện tại Q vẫn chưa tìm thấy hàm PHP nào cho import hay load file .json, khi xử lý xong dữ liệu JSON rùi, muốn export hay save ra file .json thì dùng hàm gì?

Khi người dùng tắt javascript --> AJAX và JQuery cũng không hoạt động -->JSON không hoạt động, vậy giải pháp khắc phục cho tình huống này?

Pro nào biết thì chỉ giáo thêm.

Thanks.

Chào bạn quangteo.Theo mình thì .json cũng chỉ là file lên ta dùng hàm
PHP Code:
file_get_contents(test.json);  
Ví dụ mình có file test.json :
PHP Code:
{
    
"nobitacnt" : {
        
"id" 1,
        
"age"21
    
},
    
"xukacnt" : {
        
"id" 2,
        
"age"20,
        
"address" "hai_phong"
    
},
    
"chaiencnt" : {
        
"id" 3,
        
"age"23,
        
"address" "HCM",
        
"email" "email@gmail.com"
    
}
}  
---Trong jquery có hàm $.getJSON('test.json'); để load file .json;
---Ngoài cách sử dụng javascript ta có thể load và lấy dữ liệu của file .json bằng php,Ví dụ cho dễ hiểu nha :
PHP Code:
<?php
$string 
file_get_contents("test.json");$json json_decode($string,true);//chuyển $json thành mảng
//$json = json_decode($string); chuyển $json thành object
foreach($json as $key => $value) {
    echo 
$key." <br />";
    if (
is_array($value)) {
        foreach (
$value as $key => $value) {
          echo 
$key."  = ".$value "<br />";
        }
    }

}
?>/* Output sẽ là :

nobitacnt
id = 1
age = 21
xukacnt
id = 2
age = 20
address = hai_phong
chaiencnt
id = 3
age = 23
address = HCM
email = email@gmail.com
*/
---Hàm json_decode sẽ chuyển dữ liệu dạng json thành mảng lúc này ta chỉ cần sử dụng vòng lặp để lấy giá trị của chúng
---Theo mình thì Json tương tác mạnh với Ajax lên người ta thường sử dụng trong Ajax,Chú ý nó bắt lỗi rất ký lên phải cẩn thận từng dấu phẩy ',' ,nhiều lúc thiều 1 dấu ',' làm cả chương trình không chạy luôn :D

chào @hongquang_xt,

json trả về cho client là {"idUser":"10","userName":"toilatoi","password" :"1 23456","role":"2"}
Thì code như nào để lấy các giá trị mà json trả về
Để lấy json bạn dùng ajax hay jquery

Còn
Và code như thế nào để đưa các giá trị từ textfield lên url API
thì bạn dùng method GET trong tag <form>,
với link: http://localhost:8080/Client/Registe...ass=nam&role=2, bạn tạo form:

HTML Code:
<form action='Client/Register.php' method='GET'>
<input type='text' id='uname' />
<input type='text' id='pass' />
<input type='text' id='role' />
<input type='submit' id='ok' value='ok' />
</form>
cho em hỏi JSON có encode được các ký tự đặc biệt ko? Ví dụ như: >, <, ", @, # .... Mong nhận được sự giúp dỡ của các anh chị

Mình thử thì thấy PHP encode và decode ra được bình thường, chú ý " và ' thì thêm \ phía trước cho chắc ăn


Chủ toppic cho hỏi chút nhé. Có nên set 1 option (data, dataType) kiểu json không. Mình dùng thì thấy không có vấn đề gì, dữ liệu vẫn lấy ok. Và cũng không khó khăn gì khi lọc hoặc duyệt 1 mảng gồm nhiều object.


http://www.w3schools.com/json/json_intro.asp

http://www.json.org/json-vi.html

http://binhduongitc.com/bai-viet-cong-nghe/jquery/71-json-la-gi.html


JSON là gì ?
Viết tắt của JavaScript Object Notation. Chi tiết tại http://www.json.org/, nó là một chuẩn để định dạng dữ liệu, về mặt này, có thể so sánh JSON với XML YAML… Nhưng khi JSON đi với JavaScript hoặc ActionScript thì nó có tính ưu việt hơn hẳn.








Tại sao JSON có liên quan đến JavaScript, ActionScript. Đơn giản là vì dữ liệu được định dạng JSON chính là cách biểu diễn một đối tượng trong các Scripting Language này.
Khi sử dụng JSON với JavaScript hay ActionScript, không cần phải có các bước phân tích phức tạp như đối với XML. Mà có thể truy vấn trực tiếp giá trị theo tên (khóa) được định nghĩa trong JSON.
Ví dụ:
Bạn có một dữ liệu XML:
<data>
<x>2</x>
<y>3</y>
</data>
Sử dụng JavaScript để đọc dữ liệu này, bạn phải qua một bước phân tích, đưa văn bản XML thành một đối tượng dữ liệu và đọc dữ liệu theo nodes. Giả sử object của bạn là xmlObj, bạn muốn lấy dữ liệu x và y bạn sẽ gọi:
var x = xmlObj.childNodes[0].text;
var y = xmlObj.childNodes[1].text;
Trong trường hợp tương tự, bạn có một dữ liệu JSON:
var jsonStr = '{ data : { x : 2 , y : 3}}';
Sử dụng JavaScript bạn chỉ cần gọi:
eval( 'var jsonObj = ' + jsonStr + ';');
var x = jsonObj.x;
var y = jsonObj.y;
JSON là một chuẩn cực kỳ quan trọng trong lập trình webclient. Tương tác client-server (ajax chẳng hạn) với JSON đỡ rườm rà hơn sử dụng XML rất nhiều.
Đối với lập trình viên client script. JSON rút ngắn thời gian viết mã JS, AS hơn là sử  dụng XML.
Ví dụ :
Suppose we have a repeating xml-structure as below.
 
<data>
  <sales>
    <item>
      <firstname>John</firstname>
      <lastname>Brown</lastname>
    </item>
    <item>
      <firstname>Marc</firstname>
      <lastname>Johnson</lastname>
    </item>
  </sales>
</data>
Câu hỏi đặt ra là làm thế nào để chuyển dịch cấu trúc sang javascript / JSON:
var data = 
    { 
      "sales": [ 
         { "firstname" : "John", "lastname" : "Brown" },
         { "firstname" : "Marc", "lastname" : "Johnson" }
      ] // end of sales array
    }
Thể hiện là một cặp tên - giá trị  cú pháp với dấu hai chấm ở giữa. Dấu ngoặc vuông xác định các mảng, các dấu ngoặc nhọn xác định bắt đầu và kết thúc của một đối tượng JSON. Lưu ý rằng trong javascript các mục tag là bị mất. Đối tượng sales có thể được truy cập như sau :
alert("first item: " +employees.sales[0])
var extraSales = { "firstname" : "Mary",
                    "lastname"  : "Doe"};
data.sales[employees.sales.length] = extraSales; // add extra sales record (with index 2)
alert("extra sales from: " +data.sales[2].firstname); // shows "Mary"
Các bản ghi JSON được truy cập bằng cách sử dụng một chỉ số bắt đầu từ số không. Điều này cũng tương tự như truy cập vào các thẻ mục trong xml sử dụng XPath Trong trường hợp đó chỉ số bắt đầu từ một. Ngoài ra một cấu trúc con JSON phải được tạo ra đầu tiên trước trường con của nó có thể được truy cập hoặc thiết lập. Ví dụ:
data.sales[3]= extraSales; // or: data.sales.push(extraSales);
// the next statement is ok because sales[3] is has been created before
  data.sales[3].firstname = "Pete";
Rất dễ dàng qua các đối tượng JSON giữa jQuery và PHP. Dưới đây là một ví dụ simpleform.html file html dùng ajax để  gọi một simpleformSubmit.php kịch bản PHP. Trang web này sẽ gửi một đối tượng JSON, được lặp lại bởi các script PHP.
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Simple form sending and receiving a JSON object to/from PHP</title>
<script type="text/javascript" src="../../jQuery/jquery-1.2.6/dist/jquery.pack.js"></script>
<script type="text/javascript" src="../../jQuery/plugins/json2.js"></script>
 
<script type="text/javascript"><!--
$(document).ready(function(){ 
  var data = 
  { 
    "sales": [ 
      { "firstname" : "John", "lastname" : "Brown" },
      { "firstname" : "Marc", "lastname" : "Johnson" }
    ] // end of sales array
  }
  var dataString = JSON.stringify(data);
  $.post('simpleformSubmit.php', { data: dataString}, showResult, "text");
});
 
function showResult(res)
{
  $("#fullresponse").html("Full response: " +res);
  var obj = JSON.parse(res);
  $("#sales1Lastname").html("Lastname of sales[1]: " +obj.sales[1].lastname);
}
//--></script>
</head>
<body>
  <div id="fullresponse"><span/></div>
  <div id="sales1Lastname"><span/></div>
</body>
</html>
The PHP script simpleformSubmit.php:
<?php // -*-php-*- (sets emacs to use php mode)
 
$logFile = 'logFile';
$res = json_decode(stripslashes($_POST['data']), true);
error_log("result: ".$_POST['data'].", res=".json_encode($res), 3, $logFile);
error_log(", sales1_lastname: ".$res['sales'][1]['lastname'], 3, $logFile);
error_log("\n", 3, $logFile);
 
header("Content-type: text/plain");
echo json_encode($res);
?>
Ví dụ này sử dụng kịch bản json tiêu chuẩn json2.js  với phương thức JSON.stringify và JSON.parse để chuyển đổi giữa các đối tượng javascript và một chuỗi định dạng hoặc cho máy chủ. Ấn tượng của tôi là JSON.parse là khá phức tạp: nó ngăn cản việc chèn mã javascript vào một số mở rộng. Lưu ý rằng trong kịch bản PHP tôi sử dụng stripslashes trước khi giải mã chuỗi JSON. Điều này chỉ cần thiết nếu magic_quotes_runtime hoặc magic_quotes_gpc là on.


làm thế nào để PHP sử dụng JSON.PHP5.2 bắt đầu JSON hỗ trợ xây dựng.Tất nhiên, nếu ít hơn so với phiên bản này, sau đó thị trường nhận ra có rất nhiều phiên bản của PHP, tình cờ bên cạnh OK với bạn bè.PHP là chủ yếu nói về việc xây dựng trong hỗ trợ cho các JSON.Rất đơn giản, hai chức năng: json_encode và json_decode (với trình tự giống như bạn).Một mã, một giải mã.Nhìn vào mã để sử dụng:

'Yixin Chen', 'nick' = 'sâu không gian "," liên hệ "mảng = (' email '= ' shenkong tại qq dot com ',' trang web '= ' http://www.',)); chenyixin.com $ json_string = json_encode ($ arr); echo $ json_string;? 

Một mảng của ra JSON rất đơn giản.Cần lưu ý rằng trong không mã hóa UTF-8, các ký tự Trung Quốc sẽ không được mã hóa, kết quả sẽ ra giá trị rỗng, vì vậy nếu bạn sử dụng GB2312 viết mã PHP, bạn cần phải có các nội dung của người Trung Quốc vào iconv sử dụng hoặc mbUTF-8 thêm json_encode, đầu ra ở trên như sau:

{"Tên": "u9648u6bc5u946b", "nick": "u6df1u7a7a", "liên hệ": {"email": "shenkong tại qq dot com", "trang web": "

Tôi đã nói với bạn và tuần tự như thế, bạn không tin.Sẽ được mã hóa giải mã, PHP cung cấp một json_decode chức năng tương ứng, json_decode thực hiện, sẽ là một đối tượng, như sau:
? Php
$ Q. = array (
'Tên' = 'Yixin Chen' 
'Nick' = 'sâu không gian,
'Liên hệ' = array (
'Email' = 'shenkong tại qq dot com ",
'Http://www.chenyixin.com' = 'Website',
)
);
$ Json_string = json_encode ($ arr);
$ Obj = json_decode ($ json_string);
print_r ($ obj);

Truy cập vào tài sản trong phạm vi đối tượng, đúng không?$ Obj- tên, như thế này, tất nhiên, bạn có thể tắt nó nhóm trung bình, dễ gọi thì:
$ Json_string = json_encode ($ arr);
$ Obj = json_decode ($ json_string);
$ Q. = (array) $ obj;
print_r ($ arr);
Ở trên, bạn sẽ json_encode quấn chuỗi trong dấu ngoặc đơn, trong việc thực hiện eval, nó trở thành một mảng Javascript của (mảng các chuyên ngành ngữ không nên được gọi, nhưng vì thói quen của PHP, tôi đã được gọi là một mảng tốt, dễsự hiểu biết).Điều này có thể dễ dàng đi qua trên arr hoặc điều bất kỳ mà bạn muốn làm.Tôi viết thư cho bạn, nếu không được đề cập AJAX Oh?Là oh, nghĩ về, nếu máy chủ trả về một chuỗi responseText thay vì sử dụng JSON trên XML nếu xử lý Javascript lên phía trước không phải là rất thuận tiện?Gắn bó thạch cao như vậy là được sử dụng.

Trong thực tế, tôi viết cho bạn, ngoài các định dạng lưu trữ dữ liệu không phải là bên ngoài cùng, JSON và XML không có nhiều khác nhau từ Oh, nhưng ở đây tôi đã nói đó.Mặc dù XML không quan trọng nhiều, tuy nhiên, có thể giải thích một phạm vi rộng hơn các ứng dụng JSON, đó là, cross-domain dữ liệu các cuộc gọi.Bởi vì vấn đề an ninh, AJAX không hỗ trợ cross-domain gọi, do đó, để gọi các dữ liệu dưới tên miền khác nhau, rất nhiều rắc rối Oh, mặc dù có một giải pháp (đá trong bài giảng của mình ah đã đề cập, những gì các đại lý đã không hiểu nhưng biết mặc dùcó thể giải quyết).Tôi đã viết hai tài liệu đầy đủ để hiển thị các cuộc gọi giữa các miền.

Melody file index.html
script type="text/javascript" 
chức năng getProfile (str) {
var arr = eval ('(' + str +')');
document.getElementById ('nick') innerHTML = arr.nick.
}
/ Script 
body div id="nick" / div / body 
script type="text/javascript" src="http://www.phpfans.org/demo/profile.php" / script 

Hãy profile.php tập tin chuyển giao
? Php
$ Q. = array (
'Tên' = 'Yixin Chen' 
'Nick' = 'sâu không gian,
'Liên hệ' = array (
'Email' = 'shenkong tại qq dot com ",
'Http://www.chenyixin.com' = 'Website',
)
);
$ Json_string = json_encode ($ arr);
echo "getProfile ('($ json_string )')";


Rõ ràng, khi các index.html khi gọi profile.php, chuỗi JSON được tạo ra và như là một getProfile tham số, và sau đó đưa vào các div ở biệt danh, như một cross-domain trao đổi dữ liệu hoàn thành, không phải là đơn giản nhất là sử dụng JSON PHP.

JSON Examples

Array
Array typically consist of number, string, boolean, or null values and can also include nested arrays and nested objects. An array's elements are comma-delimited and are contained in brackets.
var newArray = [ "Text goes here", 29, true, null ]
var otherArray = [ [...], {...} ]
console.log( newArray[2] );true
Array with objects
This array consists of comma-delimited, nested objects which ceach ontain multiple key/value pairs- also comma-delimited. These objects can be accessed using the array's variable name and an index.
var newArray = [
 { "name": "Dagny Taggart", "age": 39 }, 
 { "name": "Francisco D'Anconia", "age": 40 }, 
 { "name": "Hank Rearden", "age": 46 }
]
console.log( newArray[0].name );Dagny Taggart
Object
This object consists of several key/value pairs. These 'properties' can be accessed using the the object's variable name followed by a period and property name -or- can be accessed like an array using the property name in quotes (in place of an index).
newObject = {
 "first": "Jimmy",
 "last": "James",
 "age": 29,
 "sex": "M",
 "salary": 63000,
 "registered": false
}
console.log( newObject.salary );63000

console.log( newObject["salary"] );63000
Object with nested array
This object contains comma-delimited key/value pairs and a nested array. The nested array can be accessed with the object name, property or 'key' containing the array and an array index.
newObject = {
 "first": "John",
 "last": "Doe",
 "age": 39,
 "sex": "M",
 "salary": 70000,
 "registered": true,
 "interests": [ "Reading", "Mountain Biking", "Hacking" ]
}
console.log( newObject.interests[0] );Reading

console.log( newObject["interests"][0] );Reading
Object with nested object
This object contains multiple comma-delimited key/value pairs and a nested object. To access an object within an object, property names or 'keys' can be chained together -or- property names can be used like an array in place of indexes.
newObject = {
 "first": "John",
 "last": "Doe",
 "age": 39,
 "sex": "M",
 "salary": 70000,
 "registered": true,
 "favorites": {
  "color": "Blue",
  "sport": "Soccer",
  "food": "Spaghetti"
 } 
}
console.log( newObject.favorites.food );Spaghetti

console.log( newObject["favorites"]["food"] );Spaghetti
Object with nested arrays and objects
This object is more complex and typical of what might come from an API. It contains key/value pairs, nested arrays and nested objects. Any of its elements can be accessed with a combination of the above techniques.
newObject = {
 "first": "John",
 "last": "Doe",
 "age": 39,
 "sex": "M",
 "salary": 70000,
 "registered": true,
 "interests": [ "Reading", "Mountain Biking", "Hacking" ],
 "favorites": {
  "color": "Blue",
  "sport": "Soccer",
  "food": "Spaghetti"
 }, 
 "skills": [
  {
   "category": "PHP",
   "tests": [
    { "name": "One", "score": 90 },
    { "name": "Two", "score": 96 }
   ] 
  },
  {
   "category": "CouchDB",
   "tests": [
    { "name": "One", "score": 32 },
    { "name": "Two", "score": 84 }
   ] 
  },
  {
   "category": "Node.js",
   "tests": [
    { "name": "One", "score": 97 },
    { "name": "Two", "score": 93 }
   ] 
  }
 ]
}
console.log( newObject.skills[0].category );PHP

console.log( newObject["skills"][0]["category"] );PHP

console.log( newObject.skills[1].tests[0].score );32

console.log( newObject["skills"][1]["tests"][0]["score"] );32