Rumah >pembangunan bahagian belakang >masalah PHP >Tukar data php json kepada tatasusunan

Tukar data php json kepada tatasusunan

王林
王林asal
2023-05-23 11:14:36452semak imbas

Dalam PHP, kadangkala kita perlu menukar data JSON kepada format tatasusunan untuk diproses. Pada masa ini, kita boleh menggunakan fungsi json_decode() untuk menukar data JSON kepada tatasusunan PHP. Artikel ini akan memperkenalkan cara menggunakan fungsi json_decode() untuk menukar data JSON kepada tatasusunan dan menjawab beberapa soalan biasa.

JSON ialah format pertukaran data ringan yang digunakan secara meluas untuk menghantar data kerana kesederhanaan, kemudahan penggunaan dan kemudahan pengembangannya. PHP ialah bahasa pengaturcaraan yang ditaip lemah yang cekap, pantas, mudah dipelajari dan digunakan. Memandangkan format JSON disokong secara asli dalam PHP, adalah sangat mudah untuk menggunakan PHP untuk memproses data JSON semasa pembangunan.

Gunakan fungsi json_decode() untuk menukar data JSON kepada tatasusunan

Berikut ialah kod sampel untuk menukar data JSON kepada tatasusunan:

$json = '{"name":"Tom","age":"20","sex":"male"}';

$arr = json_decode($json, true);

var_dump($arr);

Hasil output:

array(3) {
  ["name"]=>
  string(3) "Tom"
  ["age"]=>
  string(2) "20"
  ["sex"]=>
  string(4) "male"
}

Seperti yang anda lihat, fungsi json_decode() menukar data JSON kepada tatasusunan PHP. Parameter kedua fungsi ini boleh ditetapkan kepada benar atau palsu, yang mengembalikan tatasusunan bersekutu apabila ditetapkan kepada benar, atau objek apabila ditetapkan kepada palsu atau tidak ditetapkan.

Berikut ialah kod sampel untuk mengembalikan objek:

$json = '{"name":"Tom","age":"20","sex":"male"}';

$obj = json_decode($json);

var_dump($obj);

Hasil output:

object(stdClass)#1 (3) {
  ["name"]=>
  string(3) "Tom"
  ["age"]=>
  string(2) "20"
  ["sex"]=>
  string(4) "male"
}

Apabila menghuraikan rentetan JSON, jika didapati bahawa pengekodan aksara tidak UTF-8, ia perlu ditukar kepada pengekodan UTF-8:

$json = '{"name":"Tom","age":"20","sex":"male"}';

$json = mb_convert_encoding($json, 'UTF-8', 'auto'); // 将编码转换为 UTF-8

$arr = json_decode($json, true);

var_dump($arr);

Soalan Lazim

1 Bagaimana untuk menangani ralat penghuraian JSON?

Semasa proses memproses data JSON, ralat penghuraian mungkin berlaku disebabkan masalah dengan format data JSON atau format pengekodan. Pada ketika ini, anda boleh menggunakan fungsi json_last_error() untuk mendapatkan punca ralat penghuraian. Fungsi ini mengembalikan nombor yang mewakili jenis ralat penghuraian JSON. Berikut ialah takrifan jenis ralat:

  • JSON_ERROR_NONE: Tiada ralat, penghuraian berjaya.
  • JSON_ERROR_DEPTH: Data JSON terlalu kompleks dan melebihi kedalaman maksimum yang ditetapkan.
  • JSON_ERROR_STATE_MISMATCH: Format data JSON tidak betul.
  • JSON_ERROR_CTRL_CHAR: Terdapat aksara kawalan yang salah.
  • JSON_ERROR_SYNTAX: Terdapat ralat sintaks dalam data JSON.
  • JSON_ERROR_UTF8: Data JSON tidak dikodkan UTF-8.

Gunakan kod berikut untuk mendapatkan punca ralat penghuraian:

$json = '{"name": "Tom""age": "20"}'; // 注意,这里有错误

$arr = json_decode($json, true);

if (json_last_error() !== JSON_ERROR_NONE) {
    switch (json_last_error()) {
        case JSON_ERROR_DEPTH:
            echo 'JSON 数据过于复杂,超出了设置的最大深度';
            break;
        case JSON_ERROR_STATE_MISMATCH:
            echo 'JSON 数据格式不正确';
            break;
        case JSON_ERROR_CTRL_CHAR:
            echo 'JSON 数据中有不正确的控制字符';
            break;
        case JSON_ERROR_SYNTAX:
            echo 'JSON 数据存在语法错误';
            break;
        case JSON_ERROR_UTF8:
            echo 'JSON 数据不是 UTF-8 编码';
            break;
        default:
            echo '未知的 JSON 解析错误';
            break;
    }
}

var_dump($arr);

Hasil keluaran:

JSON 数据存在语法错误
NULL

Seperti yang ditunjukkan di atas, fungsi json_last_error() boleh dengan mudah dapatkan ralat penghuraian untuk mencari masalah dengan cepat.

2. Bagaimana untuk menangani masalah format JSON yang tidak standard?

Dalam penggunaan sebenar, sesetengah data JSON mungkin tidak berada dalam format yang paling piawai, seperti penggunaan koma selepas nilai atribut terakhir. Jika anda menggunakan fungsi json_decode() untuk menghuraikan data JSON ini, NULL akan dikembalikan. Pada ketika ini, kami boleh menggunakan perpustakaan pihak ketiga untuk pemprosesan.

Berikut ialah contoh kod yang menggunakan perpustakaan json5 untuk memproses format bukan kanonik JSON:

// 首先,安装 json5 库
// composer require symfony/polyfill-mbstring
// composer require webonyx/json5

$json = '{"name": "Tom", "age": 20, }'; // 注意,这里有错误

use Json5Parser;

$parser = new Parser();
$arr = $parser->decode($json);

var_dump($arr);

Hasil output:

array(2) {
  ["name"]=>
  string(3) "Tom"
  ["age"]=>
  int(20)
}

Seperti yang ditunjukkan di atas, ia boleh menjadi mudah diproses menggunakan pustaka json5 Isu dengan format bukan standard JSON.

3. Bagaimana untuk menangani masalah akses merentas domain data JSON?

Masalah dengan akses merentas domain data JSON ialah atas sebab keselamatan, penyemak imbas melarang bahagian hadapan daripada mengakses sumber dalam domain lain merentas permintaan ajax dalam permintaan ajax. Pada masa ini, kita perlu membuat beberapa tetapan.

Berikut ialah contoh kod untuk menggunakan PHP untuk mencapai akses merentas domain:

header('Access-Control-Allow-Origin: *'); // 允许所有域名访问
header('Content-Type: application/json');

$json = '{"name": "Tom", "age": 20, "sex": "male"}';

echo $json;

Seperti yang ditunjukkan di atas, menetapkan pengepala Access-Control-Allow-Origin dalam PHP membenarkan nama domain lain untuk menjadi akses merentas domain.

Kesimpulan

Setakat ini, kami telah memperkenalkan cara menggunakan fungsi json_decode() untuk menukar data JSON kepada tatasusunan, dan cara menyelesaikan beberapa masalah biasa yang dihadapi dalam memproses data JSON. Saya harap artikel ini dapat membantu semua orang.

Atas ialah kandungan terperinci Tukar data php json kepada tatasusunan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn