2009-09-16 57 views
28

Tôi chưa bao giờ sử dụng JSON trước và tôi đang cố gắng để sử dụng javascript sau: http://jqueryselectcombo.googlecode.com/files/jquery.selectCombo1.2.6.jsCách tạo json bằng php?

Nó cần một đầu ra JSON trong các định dạng sau:

[{oV: 'myfirstvalue', oT: 'myfirsttext'}, 
{oV: 'mysecondvalue', oT: 'mysecondtext'}] 

bạn có thể hướng dẫn cho tôi một ví dụ về cách tạo ra một đầu ra JSON như trên, bằng cách sử dụng PHP?

Trả lời

10

Cách đơn giản nhất có lẽ sẽ bắt đầu với một mảng kết hợp của các cặp bạn muốn:

$data = array("myfirstvalue" => "myfirsttext", "mysecondvalue" => "mysecondtext"); 

sau đó sử dụng một foreach và một số chuỗi nối :

$jsontext = "["; 
foreach($data as $key => $value) { 
    $jsontext .= "{oV: '".addslashes($key)."', oT: '".addslashes($value)."'},"; 
} 
$jsontext = substr_replace($jsontext, '', -1); // to get rid of extra comma 
$jsontext .= "]"; 

Hoặc nếu bạn có phiên bản PHP gần đây, bạn có thể sử dụng mã hóa json functi các tiện ích được tích hợp sẵn - chỉ cần cẩn thận những dữ liệu nào bạn truyền cho chúng để làm cho dữ liệu phù hợp với định dạng mong muốn.

+0

như một say mê cảm ơn bạn. Mặc dù nếu tôi hiểu chính xác, tôi đã sử dụng "json_encode" sẽ có mã hóa tốt hơn? – Haluk

+2

Tại sao không chỉ đơn giản là sử dụng json_encode? –

+0

@TimWachter Câu trả lời này là từ năm 2009; lưu ý các bit ở cuối về "nếu bạn có một phiên bản gần đây"; một số lượng máy chủ hợp lý vẫn chỉ chạy PHP 4 (và 'json_encode' được giới thiệu trong 5.2). – Amber

60

Một khi bạn có dữ liệu PHP, bạn có thể sử dụng chức năng json_encode; nó đi kèm với PHP kể từ PHP 5.2

Trong trường hợp của bạn, bạn JSON chuỗi đại diện:

  • một danh sách có chứa 2 nguyên tố
  • mỗi người là một đối tượng, có chứa 2 thuộc tính/giá trị

Trong PHP, điều này sẽ tạo cấu trúc mà bạn đại diện:

$data = array(
    (object)array(
     'oV' => 'myfirstvalue', 
     'oT' => 'myfirsttext', 
    ), 
    (object)array(
     'oV' => 'mysecondvalue', 
     'oT' => 'mysecondtext', 
    ), 
); 
var_dump($data); 

Các var_dump giúp bạn:

array 
    0 => 
    object(stdClass)[1] 
     public 'oV' => string 'myfirstvalue' (length=12) 
     public 'oT' => string 'myfirsttext' (length=11) 
    1 => 
    object(stdClass)[2] 
     public 'oV' => string 'mysecondvalue' (length=13) 
     public 'oT' => string 'mysecondtext' (length=12) 

Và, mã hóa nó để JSON:

$json = json_encode($data); 
echo $json; 

Bạn nhận:

[{"oV":"myfirstvalue","oT":"myfirsttext"},{"oV":"mysecondvalue","oT":"mysecondtext"}] 


BTW: Frolm những gì tôi nhớ, tôi muốn nói chuỗi JSON của bạn không phải là dữ liệu JSON hợp lệ: phải có hai dấu ngoặc kép tạo thành chuỗi, bao gồm tên của các thuộc tính đối tượng

Xem http://www.json.org/ cho ngữ pháp.


Hope this helps :-)

+2

Bạn không thực sự cần phải cast mảng thành các đối tượng. json_encode sẽ tự động con số nó sẽ đại diện cho những thứ như một đối tượng nếu bạn có các phím chuỗi. –

+1

Xin chào, Kết quả tôi nhận được từ mã trên thực sự khác: mảng (2) {[0] => đối tượng (stdClass) # 1 (2) {["oV"] => chuỗi (12) "myfirstvalue" ["oT"] => chuỗi (11) "myfirsttext"} [1] => đối tượng (stdClass) # 2 (2) {["oV"] => chuỗi (13) "mysecondvalue" ["oT "] => chuỗi (12)" mysecondtext "}} [{" oV ":" myfirstvalue "," oT ":" myfirsttext "}, {" oV ":" mysecondvalue "," oT ":" mysecondtext "}] – Haluk

+1

Tôi đã xóa var_dump khỏi mã trên và sửa đổi phần chính như sau. Bây giờ nó hoạt động tốt: $ data = array ( mảng ( OV => 'myfirstvalue', ot => 'myfirsttext', ), mảng ( OV => 'mysecondvalue', ot => 'mysecondtext', ), ); – Haluk

2

Đây là mã php để tạo ra định dạng json

<?php 

    $catId = $_GET['catId']; 
    $catId = $_POST['catId']; 

    $conn = mysqli_connect("localhost","root","","DBName"); 
    if(!$conn) 
    { 
     trigger_error('Could not Connect' .mysqli_connect_error()); 
    } 

    $sql = "SELECT * FROM TableName"; 
    $result = mysqli_query($conn, $sql); 

    $array = array(); 

    while($row=mysqli_fetch_assoc($result)) 
    { 
     $array[] = $row; 
    } 

    echo'{"ProductsData":'.json_encode($array).'}'; //Here ProductsData is just a simple String u can write anything instead 
    mysqli_close('$conn'); 
?> 
Các vấn đề liên quan