Hướng dẫn store array json in mysql - lưu trữ mảng json trong mysql

Tôi muốn lưu mảng JSON này mà fb-login của tôi trở lại cơ sở dữ liệu. Tuy nhiên, tôi không thực sự biết cách chuyển đổi nó thành một chuỗi bằng PHP.

[{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}]

Tôi đã thử mã này dưới đây nhưng tôi thậm chí không hoàn toàn chắc chắn cho dù lợi nhuận đăng nhập FB có phải là mảng JSON hay không.

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));

Làm thế nào tôi có thể lưu các môn thể thao khác nhau vào cơ sở dữ liệu của mình trong một chuỗi?

Bất kì sự trợ giúp nào đều được đánh giá cao.

Thanks.

Chỉnh sửa: Phần trên trả về null.


Chỉnh sửa thứ hai:

if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }

  • Tạo giá trị JSON

  • Chuẩn hóa, hợp nhất và tự động ra giá trị JSON

  • Tìm kiếm và sửa đổi các giá trị JSON

  • Cú pháp đường dẫn JSON

  • So sánh và đặt hàng các giá trị JSON

  • Chuyển đổi giữa các giá trị JSON và không json

  • Tổng hợp các giá trị JSON

MySQL hỗ trợ kiểu dữ liệu

["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
7 gốc được xác định bởi RFC 7159 cho phép truy cập hiệu quả vào dữ liệu trong các tài liệu JSON (ký hiệu đối tượng JavaScript). Kiểu dữ liệu
["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
7 cung cấp các lợi thế này so với việc lưu trữ các chuỗi định dạng JSON trong một cột chuỗi:

  • Xác thực tự động các tài liệu JSON được lưu trữ trong các cột

    ["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
    7. Tài liệu không hợp lệ tạo ra một lỗi.

  • Định dạng lưu trữ tối ưu hóa. Các tài liệu JSON được lưu trữ trong các cột

    ["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
    7 được chuyển đổi thành định dạng nội bộ cho phép truy cập đọc nhanh vào các thành phần tài liệu. Khi máy chủ sau đó phải đọc một giá trị JSON được lưu trữ ở định dạng nhị phân này, giá trị không cần phải phân tích từ biểu diễn văn bản. Định dạng nhị phân được cấu trúc để cho phép máy chủ tra cứu các tiểu mục hoặc giá trị lồng nhau trực tiếp bằng khóa hoặc chỉ mục mảng mà không cần đọc tất cả các giá trị trước hoặc sau khi chúng trong tài liệu.

MySQL 8.0 cũng hỗ trợ định dạng bản vá hợp nhất JSON được xác định trong RFC 7396, sử dụng hàm

[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]]
{"k1": "value", "k2": [10, 20]}
1. Xem mô tả của chức năng này, cũng như bình thường hóa, hợp nhất và tự động phát hiện các giá trị JSON, để biết các ví dụ và thông tin thêm.JSON Merge Patch format defined in RFC 7396, using the
[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]]
{"k1": "value", "k2": [10, 20]}
1 function. See the description of this function, as well as Normalization, Merging, and Autowrapping of JSON Values, for examples and further information.

Ghi chú

Cuộc thảo luận này sử dụng

["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
7 trong monotype để chỉ ra cụ thể loại dữ liệu JSON và JSON JSON, trong phông chữ thông thường để chỉ ra dữ liệu JSON nói chung.JSON in regular font to indicate JSON data in general.

Không gian cần thiết để lưu trữ một tài liệu

["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
7 gần giống như đối với
[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]]
{"k1": "value", "k2": [10, 20]}
4 hoặc
[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]]
{"k1": "value", "k2": [10, 20]}
5; Xem Phần & NBSP; 11.7, Yêu cầu lưu trữ kiểu dữ liệu, để biết thêm thông tin. Điều quan trọng là phải nhớ rằng kích thước của bất kỳ tài liệu JSON nào được lưu trữ trong cột
["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
7 bị giới hạn ở giá trị của biến hệ thống
[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]]
{"k1": "value", "k2": [10, 20]}
7. . Lưu ý rằng đối với cột
["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
7, kích thước lưu trữ và do đó giá trị được trả về bởi hàm này, được sử dụng bởi cột trước khi cập nhật một phần có thể được thực hiện trên đó (xem cuộc thảo luận về tối ưu hóa một phần JSON sau này Phần này).

Trước MySQL 8.0.13, cột

["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
7 không thể có giá trị mặc định không phải -____ 71.

Cùng với kiểu dữ liệu

["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
7, một tập hợp các hàm SQL có sẵn để cho phép các hoạt động trên các giá trị JSON, chẳng hạn như tạo, thao tác và tìm kiếm. Các cuộc thảo luận sau đây cho thấy các ví dụ về các hoạt động này. Để biết chi tiết về các chức năng riêng lẻ, xem Phần & NBSP; 12,18, Chức năng của JSON.

Một tập hợp các chức năng không gian để vận hành trên các giá trị Geojson cũng có sẵn. Xem Phần & NBSP; 12.17.11, Chức năng Geojson không gian.

Các cột

["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
7, giống như các cột của các loại nhị phân khác, không được lập chỉ mục trực tiếp; Thay vào đó, bạn có thể tạo một chỉ mục trên một cột được tạo trích xuất giá trị vô hướng từ cột
["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
7. Xem lập chỉ mục một cột được tạo để cung cấp chỉ mục cột JSON, để biết ví dụ chi tiết.

Trình tối ưu hóa MySQL cũng tìm kiếm các chỉ mục tương thích trên các cột ảo phù hợp với các biểu thức JSON.

Trong MySQL 8.0.17 trở lên, công cụ lưu trữ

mysql> CREATE TABLE t1 (jdoc JSON);
Query OK, 0 rows affected (0.20 sec)

mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO t1 VALUES('[1, 2,');
ERROR 3140 (22032) at line 2: Invalid JSON text:
"Invalid value." at position 6 in value (or column) '[1, 2,'.
5 hỗ trợ các chỉ mục đa giá trị trên các mảng JSON. Xem các chỉ mục đa giá trị.

MySQL NDB Cluster 8.0 hỗ trợ các cột

["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
7 và các chức năng JSON của MySQL, bao gồm tạo một chỉ mục trên một cột được tạo từ cột
["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
7 dưới dạng cách giải quyết để không thể lập chỉ mục cột
["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
7. Tối đa 3 cột
["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
7 mỗi bảng
mysql> SELECT JSON_TYPE('["a", "b", 1]');
+----------------------------+
| JSON_TYPE('["a", "b", 1]') |
+----------------------------+
| ARRAY                      |
+----------------------------+

mysql> SELECT JSON_TYPE('"hello"');
+----------------------+
| JSON_TYPE('"hello"') |
+----------------------+
| STRING               |
+----------------------+

mysql> SELECT JSON_TYPE('hello');
ERROR 3146 (22032): Invalid data type for JSON data in argument 1
to function json_type; a JSON string or JSON type is required.
0 được hỗ trợ.

Cập nhật một phần của các giá trị JSON

Trong MySQL 8.0, trình tối ưu hóa có thể thực hiện cập nhật một phần, tại chỗ của cột

["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
7 thay vì xóa tài liệu cũ và viết toàn bộ tài liệu mới vào cột. Tối ưu hóa này có thể được thực hiện để cập nhật đáp ứng các điều kiện sau:

  • Cột đang được cập nhật được khai báo là

    ["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
    7.

  • Tuyên bố

    mysql> SELECT JSON_TYPE('["a", "b", 1]');
    +----------------------------+
    | JSON_TYPE('["a", "b", 1]') |
    +----------------------------+
    | ARRAY                      |
    +----------------------------+
    
    mysql> SELECT JSON_TYPE('"hello"');
    +----------------------+
    | JSON_TYPE('"hello"') |
    +----------------------+
    | STRING               |
    +----------------------+
    
    mysql> SELECT JSON_TYPE('hello');
    ERROR 3146 (22032): Invalid data type for JSON data in argument 1
    to function json_type; a JSON string or JSON type is required.
    3 sử dụng bất kỳ trong ba hàm
    mysql> SELECT JSON_TYPE('["a", "b", 1]');
    +----------------------------+
    | JSON_TYPE('["a", "b", 1]') |
    +----------------------------+
    | ARRAY                      |
    +----------------------------+
    
    mysql> SELECT JSON_TYPE('"hello"');
    +----------------------+
    | JSON_TYPE('"hello"') |
    +----------------------+
    | STRING               |
    +----------------------+
    
    mysql> SELECT JSON_TYPE('hello');
    ERROR 3146 (22032): Invalid data type for JSON data in argument 1
    to function json_type; a JSON string or JSON type is required.
    4,
    mysql> SELECT JSON_TYPE('["a", "b", 1]');
    +----------------------------+
    | JSON_TYPE('["a", "b", 1]') |
    +----------------------------+
    | ARRAY                      |
    +----------------------------+
    
    mysql> SELECT JSON_TYPE('"hello"');
    +----------------------+
    | JSON_TYPE('"hello"') |
    +----------------------+
    | STRING               |
    +----------------------+
    
    mysql> SELECT JSON_TYPE('hello');
    ERROR 3146 (22032): Invalid data type for JSON data in argument 1
    to function json_type; a JSON string or JSON type is required.
    5 hoặc
    mysql> SELECT JSON_TYPE('["a", "b", 1]');
    +----------------------------+
    | JSON_TYPE('["a", "b", 1]') |
    +----------------------------+
    | ARRAY                      |
    +----------------------------+
    
    mysql> SELECT JSON_TYPE('"hello"');
    +----------------------+
    | JSON_TYPE('"hello"') |
    +----------------------+
    | STRING               |
    +----------------------+
    
    mysql> SELECT JSON_TYPE('hello');
    ERROR 3146 (22032): Invalid data type for JSON data in argument 1
    to function json_type; a JSON string or JSON type is required.
    6 để cập nhật cột. Việc gán trực tiếp giá trị cột (ví dụ:
    mysql> SELECT JSON_TYPE('["a", "b", 1]');
    +----------------------------+
    | JSON_TYPE('["a", "b", 1]') |
    +----------------------------+
    | ARRAY                      |
    +----------------------------+
    
    mysql> SELECT JSON_TYPE('"hello"');
    +----------------------+
    | JSON_TYPE('"hello"') |
    +----------------------+
    | STRING               |
    +----------------------+
    
    mysql> SELECT JSON_TYPE('hello');
    ERROR 3146 (22032): Invalid data type for JSON data in argument 1
    to function json_type; a JSON string or JSON type is required.
    7) không thể được thực hiện dưới dạng cập nhật một phần.

    Cập nhật nhiều cột

    ["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
    7 trong một câu lệnh
    mysql> SELECT JSON_TYPE('["a", "b", 1]');
    +----------------------------+
    | JSON_TYPE('["a", "b", 1]') |
    +----------------------------+
    | ARRAY                      |
    +----------------------------+
    
    mysql> SELECT JSON_TYPE('"hello"');
    +----------------------+
    | JSON_TYPE('"hello"') |
    +----------------------+
    | STRING               |
    +----------------------+
    
    mysql> SELECT JSON_TYPE('hello');
    ERROR 3146 (22032): Invalid data type for JSON data in argument 1
    to function json_type; a JSON string or JSON type is required.
    3 có thể được tối ưu hóa theo kiểu này; MySQL có thể thực hiện cập nhật một phần chỉ các cột có giá trị được cập nhật bằng ba chức năng vừa được liệt kê.

  • Cột đầu vào và cột đích phải là cùng một cột; Một tuyên bố như

    mysql> SELECT JSON_ARRAY('a', 1, NOW());
    +----------------------------------------+
    | JSON_ARRAY('a', 1, NOW())              |
    +----------------------------------------+
    | ["a", 1, "2015-07-27 09:43:47.000000"] |
    +----------------------------------------+
    0 không thể được thực hiện dưới dạng cập nhật một phần.

    Bản cập nhật có thể sử dụng các cuộc gọi lồng vào bất kỳ chức năng nào được liệt kê trong mục trước, trong bất kỳ kết hợp nào, miễn là các cột đầu vào và mục tiêu là như nhau.

  • Tất cả các thay đổi thay thế các giá trị mảng hoặc đối tượng hiện có bằng các giá trị mới và không thêm bất kỳ phần tử mới nào vào đối tượng hoặc mảng cha.

  • Giá trị được thay thế phải ít nhất là lớn như giá trị thay thế. Nói cách khác, giá trị mới không thể lớn hơn giá trị cũ.

    Một ngoại lệ có thể xảy ra với yêu cầu này xảy ra khi bản cập nhật một phần trước đó đã để lại đủ không gian cho giá trị lớn hơn. Bạn có thể sử dụng chức năng

    mysql> SELECT JSON_ARRAY('a', 1, NOW());
    +----------------------------------------+
    | JSON_ARRAY('a', 1, NOW())              |
    +----------------------------------------+
    | ["a", 1, "2015-07-27 09:43:47.000000"] |
    +----------------------------------------+
    1 Xem số lượng không gian đã được giải phóng bởi bất kỳ cập nhật một phần của cột
    ["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
    7.

Các bản cập nhật một phần như vậy có thể được ghi vào nhật ký nhị phân bằng cách sử dụng định dạng nhỏ gọn giúp tiết kiệm không gian; Điều này có thể được bật bằng cách đặt biến hệ thống

mysql> SELECT JSON_ARRAY('a', 1, NOW());
+----------------------------------------+
| JSON_ARRAY('a', 1, NOW())              |
+----------------------------------------+
| ["a", 1, "2015-07-27 09:43:47.000000"] |
+----------------------------------------+
3 thành
mysql> SELECT JSON_ARRAY('a', 1, NOW());
+----------------------------------------+
| JSON_ARRAY('a', 1, NOW())              |
+----------------------------------------+
| ["a", 1, "2015-07-27 09:43:47.000000"] |
+----------------------------------------+
4.

Điều quan trọng là phải phân biệt cập nhật một phần của giá trị cột

["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
7 được lưu trữ trong bảng từ việc viết bản cập nhật một phần của một hàng vào nhật ký nhị phân. Có thể cập nhật hoàn chỉnh cột
["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
7 được ghi lại trong nhật ký nhị phân dưới dạng cập nhật một phần. Điều này có thể xảy ra khi một trong hai (hoặc cả hai) của hai điều kiện cuối cùng từ danh sách trước đó không được đáp ứng nhưng các điều kiện khác được thỏa mãn.

Xem thêm mô tả của

mysql> SELECT JSON_ARRAY('a', 1, NOW());
+----------------------------------------+
| JSON_ARRAY('a', 1, NOW())              |
+----------------------------------------+
| ["a", 1, "2015-07-27 09:43:47.000000"] |
+----------------------------------------+
3.

Một vài phần tiếp theo cung cấp thông tin cơ bản liên quan đến việc tạo và thao tác các giá trị JSON.

Tạo giá trị JSON

Một mảng JSON chứa một danh sách các giá trị được phân tách bằng dấu phẩy và được đặt trong các ký tự

mysql> SELECT JSON_ARRAY('a', 1, NOW());
+----------------------------------------+
| JSON_ARRAY('a', 1, NOW())              |
+----------------------------------------+
| ["a", 1, "2015-07-27 09:43:47.000000"] |
+----------------------------------------+
8 và
mysql> SELECT JSON_ARRAY('a', 1, NOW());
+----------------------------------------+
| JSON_ARRAY('a', 1, NOW())              |
+----------------------------------------+
| ["a", 1, "2015-07-27 09:43:47.000000"] |
+----------------------------------------+
9:

["abc", 10, null, true, false]

Một đối tượng JSON chứa một tập hợp các cặp giá trị khóa được phân tách bằng dấu phẩy và được đặt trong phạm vi

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
00 và
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
01:

{"k1": "value", "k2": 10}

Như các ví dụ minh họa, các mảng và đối tượng JSON có thể chứa các giá trị vô hướng là chuỗi hoặc số, chữ JSON NULL theo nghĩa đen hoặc chữ JSON boolean đúng hoặc sai. Chìa khóa trong các đối tượng JSON phải là chuỗi. Các giá trị vô hướng tạm thời (ngày, giờ hoặc DateTime) cũng được cho phép:

["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]

Nesting được phép trong các phần tử mảng JSON và giá trị khóa đối tượng JSON:

[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]]
{"k1": "value", "k2": [10, 20]}

Bạn cũng có thể lấy các giá trị JSON từ một số hàm do MySQL cung cấp cho mục đích này (xem Phần & NBSP; 12.18.2, các hàm tạo ra các giá trị JSON) cũng như bằng cách sử dụng các giá trị của các loại khác vào loại

["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
7 ) (xem chuyển đổi giữa các giá trị JSON và không phải là JSON). Một số đoạn tiếp theo mô tả cách MySQL xử lý các giá trị JSON được cung cấp dưới dạng đầu vào.

Trong MySQL, các giá trị JSON được viết dưới dạng chuỗi. MySQL phân tích bất kỳ chuỗi nào được sử dụng trong bối cảnh yêu cầu giá trị JSON và tạo ra lỗi nếu nó không hợp lệ là JSON. Các bối cảnh này bao gồm chèn một giá trị vào một cột có kiểu dữ liệu

["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
7 và chuyển một đối số cho một hàm mong đợi giá trị JSON (thường được hiển thị là
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
05 hoặc
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
06 trong tài liệu cho các hàm JSON của MySQL), như các ví dụ sau đây chứng minh:

  • Cố gắng chèn giá trị vào cột

    ["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
    7 thành công nếu giá trị là giá trị JSON hợp lệ, nhưng không thành công nếu không:

    mysql> CREATE TABLE t1 (jdoc JSON);
    Query OK, 0 rows affected (0.20 sec)
    
    mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> INSERT INTO t1 VALUES('[1, 2,');
    ERROR 3140 (22032) at line 2: Invalid JSON text:
    "Invalid value." at position 6 in value (or column) '[1, 2,'.

    Các vị trí cho vị trí tại vị trí

    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    08, trong các thông báo lỗi như vậy là dựa trên 0, nhưng nên được coi là chỉ dẫn sơ bộ về nơi vấn đề trong một giá trị thực sự xảy ra.at position
    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    08
    in such error messages are 0-based, but should be considered rough indications of where the problem in a value actually occurs.

  • Hàm

    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    09 mong đợi một đối số JSON và cố gắng phân tích nó vào giá trị JSON. Nó trả về loại JSON của giá trị nếu nó hợp lệ và tạo ra lỗi nếu không:

    mysql> SELECT JSON_TYPE('["a", "b", 1]');
    +----------------------------+
    | JSON_TYPE('["a", "b", 1]') |
    +----------------------------+
    | ARRAY                      |
    +----------------------------+
    
    mysql> SELECT JSON_TYPE('"hello"');
    +----------------------+
    | JSON_TYPE('"hello"') |
    +----------------------+
    | STRING               |
    +----------------------+
    
    mysql> SELECT JSON_TYPE('hello');
    ERROR 3146 (22032): Invalid data type for JSON data in argument 1
    to function json_type; a JSON string or JSON type is required.

MySQL xử lý các chuỗi được sử dụng trong bối cảnh JSON bằng cách sử dụng bộ ký tự

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
10 và đối chiếu
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
11. Các chuỗi trong các bộ ký tự khác được chuyển đổi thành
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
10 khi cần thiết. .

Thay thế cho việc viết các giá trị JSON bằng cách sử dụng các chuỗi theo nghĩa đen, các hàm tồn tại để soạn các giá trị JSON từ các phần tử thành phần.

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
18 lấy danh sách các giá trị (có thể trống) và trả về mảng JSON chứa các giá trị đó:

mysql> SELECT JSON_ARRAY('a', 1, NOW());
+----------------------------------------+
| JSON_ARRAY('a', 1, NOW())              |
+----------------------------------------+
| ["a", 1, "2015-07-27 09:43:47.000000"] |
+----------------------------------------+

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
19 lấy một danh sách (có thể trống) của các cặp giá trị khóa và trả về một đối tượng JSON chứa các cặp đó:

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
0

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
20 lấy hai hoặc nhiều tài liệu JSON và trả về kết quả kết hợp:

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
1

Để biết thông tin về các quy tắc hợp nhất, hãy xem chuẩn hóa, hợp nhất và tự động ra các giá trị JSON.

.

Các giá trị JSON có thể được gán cho các biến do người dùng xác định:

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
2

Tuy nhiên, các biến do người dùng xác định không thể thuộc loại dữ liệu

["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
7, do đó, mặc dù
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
23 trong ví dụ trước trông giống như giá trị JSON và có cùng một bộ ký tự và đối chiếu là giá trị JSON, nhưng nó không có kiểu dữ liệu
["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
7. Thay vào đó, kết quả từ
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
19 được chuyển đổi thành một chuỗi khi được gán cho biến.not have the
["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
7 data type. Instead, the result from
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
19 is converted to a string when assigned to the variable.

Các chuỗi được tạo ra bằng cách chuyển đổi các giá trị JSON có một bộ ký tự là

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
10 và đối chiếu
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
11:

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
3

Bởi vì

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
11 là một đối chiếu nhị phân, so sánh các giá trị JSON nhạy cảm với trường hợp.

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
4

Độ nhạy của trường hợp cũng áp dụng cho JSON

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
29,
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
30 và
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
31 nghĩa đen, luôn phải được viết bằng chữ thường:

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
5

Độ nhạy của trường hợp của các chữ JSON khác nhau so với SQL

mysql> CREATE TABLE t1 (jdoc JSON);
Query OK, 0 rows affected (0.20 sec)

mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO t1 VALUES('[1, 2,');
ERROR 3140 (22032) at line 2: Invalid JSON text:
"Invalid value." at position 6 in value (or column) '[1, 2,'.
1,
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
33 và
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
34, có thể được viết trong bất kỳ chữ cái nào:

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
6

Đôi khi có thể cần thiết hoặc mong muốn để chèn các ký tự báo giá (

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
35 hoặc
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
36) vào tài liệu JSON. Giả sử cho ví dụ này rằng bạn muốn chèn một số đối tượng JSON chứa các chuỗi đại diện cho các câu nêu một số sự thật về MySQL, mỗi đối tượng được ghép nối với một từ khóa thích hợp, vào một bảng được tạo bằng câu lệnh SQL được hiển thị ở đây:

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
7

Trong số các cặp từ khóa này là cái này:

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
8

Một cách để chèn đây là đối tượng JSON vào bảng

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
37 là sử dụng hàm MySQL
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
19. Trong trường hợp này, bạn phải thoát khỏi từng ký tự trích dẫn bằng cách sử dụng dấu gạch chéo ngược, như được hiển thị ở đây:

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
9

Điều này không hoạt động theo cùng một cách nếu bạn chèn giá trị là một đối tượng JSON theo nghĩa đen, trong trường hợp đó, bạn phải sử dụng chuỗi thoát hiểm gấp đôi, như thế này:

if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
0

Sử dụng Double Backslash giúp MySQL thực hiện xử lý trình tự thoát, và thay vào đó khiến nó chuyển chuỗi theo nghĩa đen cho công cụ lưu trữ để xử lý. Sau khi chèn đối tượng JSON theo một trong hai cách vừa hiển thị, bạn có thể thấy rằng các dấu gạch chéo ngược có mặt trong giá trị cột JSON bằng cách thực hiện một

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
39 đơn giản, như thế này:

if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
1

Để tra cứu câu cụ thể này sử dụng

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
40 làm khóa, bạn có thể sử dụng toán tử đường dẫn cột
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
41, như được hiển thị ở đây:

if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
2

Điều này để lại các dấu gạch chéo ngược, cùng với các dấu ngoặc kép xung quanh. Để hiển thị giá trị mong muốn bằng cách sử dụng

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
40 làm khóa, nhưng không bao gồm các dấu ngoặc kép xung quanh hoặc bất kỳ lối thoát nào, hãy sử dụng toán tử đường dẫn nội tuyến
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
43, như thế này:

if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
3

Ghi chú

Ví dụ trước không hoạt động như được hiển thị nếu chế độ SQL máy chủ

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
44 được bật. Nếu chế độ này được đặt, một dấu gạch chéo ngược thay vì có thể sử dụng các dấu gạch chéo ngược gấp đôi để chèn theo nghĩa đen của đối tượng JSON và các dấu gạch chéo ngược được bảo tồn. Nếu bạn sử dụng chức năng
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
19 khi thực hiện chèn và chế độ này được đặt, bạn phải xen kẽ các trích dẫn đơn và đôi, như thế này:

if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
4

Xem mô tả của hàm

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
46 để biết thêm thông tin về tác động của chế độ này đối với các ký tự đã thoát trong các giá trị JSON.

Chuẩn hóa, hợp nhất và tự động ra giá trị JSON

Khi một chuỗi được phân tích cú pháp và được tìm thấy là một tài liệu JSON hợp lệ, nó cũng được chuẩn hóa. Điều này có nghĩa là các thành viên có các khóa sao chép một khóa được tìm thấy sau này trong tài liệu, đọc từ trái sang phải, bị loại bỏ. Giá trị đối tượng được tạo bởi cuộc gọi

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
19 sau đây chỉ bao gồm phần tử
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
48 thứ hai vì tên khóa đó xảy ra trước đó trong giá trị, như được hiển thị ở đây:

if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
5

Chuẩn hóa cũng được thực hiện khi các giá trị được chèn vào các cột JSON, như được hiển thị ở đây:

if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
6

Hành vi chính của bản sao cuối cùng của người Viking này được đề xuất bởi RFC 7159 và được thực hiện bởi hầu hết các trình phân tích cú pháp JavaScript. (Lỗi #86866, lỗi #26369555)last duplicate key wins behavior is suggested by RFC 7159 and is implemented by most JavaScript parsers. (Bug #86866, Bug #26369555)

Trong các phiên bản của MySQL trước 8.0.3, các thành viên có khóa đã nhân đôi một khóa được tìm thấy trước đó trong tài liệu đã bị loại bỏ. Giá trị đối tượng được tạo bởi cuộc gọi

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
19 sau đây không bao gồm phần tử
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
48 thứ hai vì tên khóa đó xảy ra trước đó trong giá trị:

if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
7

Trước MySQL 8.0.3, khóa bản sao đầu tiên này giành được sự chuẩn hóa của Wins cũng được thực hiện khi chèn các giá trị vào các cột JSON.first duplicate key wins normalization was also performed when inserting values into JSON columns.

if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
8

MySQL cũng loại bỏ thêm khoảng trắng giữa các khóa, giá trị hoặc các phần tử trong tài liệu JSON gốc và lá (hoặc chèn, khi cần thiết) một không gian sau mỗi dấu phẩy (

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
51) hoặc ruột kết (
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
52) khi hiển thị nó. Điều này được thực hiện để tăng cường khả năng đọc.

Các hàm MySQL tạo ra các giá trị JSON (xem Phần & NBSP; 12.18.2, các hàm tạo ra các giá trị JSON) luôn trả về các giá trị chuẩn hóa.

Để làm cho tra cứu hiệu quả hơn, MySQL cũng sắp xếp các phím của đối tượng JSON. Bạn nên lưu ý rằng kết quả của việc đặt hàng này có thể thay đổi và không được đảm bảo là nhất quán giữa các bản phát hành.You should be aware that the result of this ordering is subject to change and not guaranteed to be consistent across releases.

Hợp nhất các giá trị JSON

Hai thuật toán hợp nhất được hỗ trợ trong MySQL 8.0.3 (và sau đó), được thực hiện bởi các chức năng

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
20 và
[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]]
{"k1": "value", "k2": [10, 20]}
1. Chúng khác nhau về cách chúng xử lý các khóa trùng lặp:
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
20 giữ lại các giá trị cho các khóa trùng lặp, trong khi
[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]]
{"k1": "value", "k2": [10, 20]}
1 loại bỏ tất cả trừ giá trị cuối cùng. Một vài đoạn tiếp theo giải thích cách mỗi hai chức năng này xử lý việc hợp nhất các kết hợp khác nhau của các tài liệu JSON (nghĩa là, của các đối tượng và mảng).

Ghi chú

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
20 giống như hàm
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
58 được tìm thấy trong các phiên bản trước của MySQL (được đổi tên trong MySQL 8.0.3).
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
58 vẫn được hỗ trợ dưới dạng bí danh cho
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
20 trong MySQL 8.0, nhưng không được chấp nhận và có thể loại bỏ trong một bản phát hành trong tương lai.

Hợp nhất các mảng. & Nbsp; Trong các bối cảnh kết hợp nhiều mảng, các mảng được hợp nhất thành một mảng duy nhất.

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
20 Thực hiện điều này bằng cách ghép các mảng được đặt tên sau này đến cuối mảng đầu tiên.
[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]]
{"k1": "value", "k2": [10, 20]}
1 coi mỗi đối số là một mảng bao gồm một phần tử duy nhất (do đó có 0 làm chỉ mục của nó) và sau đó áp dụng khóa trùng lặp cuối cùng của WINS LOGIC để chỉ chọn đối số cuối cùng. Bạn có thể so sánh các kết quả được hiển thị bởi truy vấn này:
In contexts that combine multiple arrays, the arrays are merged into a single array.
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
20 does this by concatenating arrays named later to the end of the first array.
[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]]
{"k1": "value", "k2": [10, 20]}
1 considers each argument as an array consisting of a single element (thus having 0 as its index) and then applies last duplicate key wins logic to select only the last argument. You can compare the results shown by this query:

if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
9

Nhiều đối tượng khi hợp nhất tạo ra một đối tượng.

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
20 xử lý nhiều đối tượng có cùng một khóa bằng cách kết hợp tất cả các giá trị duy nhất cho khóa đó trong một mảng; Mảng này sau đó được sử dụng làm giá trị cho khóa đó trong kết quả.
[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]]
{"k1": "value", "k2": [10, 20]}
1 loại bỏ các giá trị mà các khóa trùng lặp được tìm thấy, hoạt động từ trái sang phải, để kết quả chỉ chứa giá trị cuối cùng cho khóa đó. Truy vấn sau đây minh họa sự khác biệt trong kết quả cho khóa trùng lặp
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
65:

["abc", 10, null, true, false]
0

Các giá trị không được sử dụng trong bối cảnh yêu cầu giá trị mảng được tự động tạo ra: giá trị được bao quanh bởi các ký tự

mysql> SELECT JSON_ARRAY('a', 1, NOW());
+----------------------------------------+
| JSON_ARRAY('a', 1, NOW())              |
+----------------------------------------+
| ["a", 1, "2015-07-27 09:43:47.000000"] |
+----------------------------------------+
8 và
mysql> SELECT JSON_ARRAY('a', 1, NOW());
+----------------------------------------+
| JSON_ARRAY('a', 1, NOW())              |
+----------------------------------------+
| ["a", 1, "2015-07-27 09:43:47.000000"] |
+----------------------------------------+
9 để chuyển đổi nó thành một mảng. Trong câu lệnh sau, mỗi đối số được tự động tạo thành một mảng (
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
68,
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
69). Chúng sau đó được hợp nhất để tạo ra một mảng kết quả duy nhất; Như trong hai trường hợp trước,
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
20 kết hợp các giá trị có cùng một khóa trong khi
[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]]
{"k1": "value", "k2": [10, 20]}
1 loại bỏ các giá trị cho tất cả các khóa trùng lặp ngoại trừ phần cuối, như được hiển thị ở đây:

["abc", 10, null, true, false]
1

Các giá trị mảng và đối tượng được hợp nhất bằng cách tự động xử lý đối tượng như một mảng và hợp nhất các mảng bằng cách kết hợp các giá trị hoặc bởi khóa trùng lặp cuối cùng sẽ thắng được theo lựa chọn hàm hợp nhất (

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
20 hoặc
[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]]
{"k1": "value", "k2": [10, 20]}
1 :last duplicate key wins according to the choice of merging function (
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
20 or
[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]]
{"k1": "value", "k2": [10, 20]}
1, respectively), as can be seen in this example:

["abc", 10, null, true, false]
2

Tìm kiếm và sửa đổi các giá trị JSON

Biểu thức đường dẫn JSON chọn một giá trị trong tài liệu JSON.

Biểu thức đường dẫn rất hữu ích với các chức năng trích xuất các phần hoặc sửa đổi tài liệu JSON, để chỉ định vị trí trong tài liệu đó để vận hành. Ví dụ: truy vấn sau trích xuất từ ​​tài liệu JSON Giá trị của thành viên với khóa

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
74:

["abc", 10, null, true, false]
3

Path Cú pháp sử dụng ký tự

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
75 hàng đầu để thể hiện tài liệu JSON đang được xem xét, theo tùy chọn theo các bộ chọn cho thấy các phần cụ thể hơn của tài liệu:

  • Một khoảng thời gian theo sau là tên khóa tên thành viên trong một đối tượng có khóa đã cho. Tên khóa phải được chỉ định trong dấu ngoặc kép nếu tên không có trích dẫn không hợp pháp trong các biểu thức đường dẫn (ví dụ: nếu nó chứa một không gian).

  • [

    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    08] Được thêm vào một
    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    77 chọn một mảng đặt tên cho giá trị tại vị trí
    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    08 trong mảng. Vị trí mảng là số nguyên bắt đầu bằng không. Nếu
    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    77 không chọn giá trị mảng, ________ 177 [0] sẽ đánh giá cùng giá trị với
    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    77:
    appended to a
    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    77 that selects an array names the value at position
    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    08 within the array. Array positions are integers beginning with zero. If
    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    77 does not select an array value,
    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    77[0] evaluates to the same value as
    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    77:

    ["abc", 10, null, true, false]
    4
  • $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    82 đến
    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    08] Chỉ định một tập hợp con hoặc phạm vi giá trị mảng bắt đầu bằng giá trị tại vị trí
    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    84 và kết thúc bằng giá trị tại vị trí
    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    08.

    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    86 được hỗ trợ như một từ đồng nghĩa với chỉ mục của phần tử mảng ngoài cùng bên phải. Địa chỉ tương đối của các yếu tố mảng cũng được hỗ trợ. Nếu
    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    77 không chọn giá trị mảng, ________ 177 [Last] đánh giá cùng giá trị với
    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    77, như được hiển thị sau trong phần này (xem phần tử mảng ngoài cùng bên phải).

  • Các đường dẫn có thể chứa

    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    90 hoặc
    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    91 ký tự đại diện:

    • $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
      
      var_dump(json_decode($json));
      
      92 đánh giá các giá trị của tất cả các thành viên trong một đối tượng JSON.

    • $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
      
      var_dump(json_decode($json));
      
      93 đánh giá các giá trị của tất cả các phần tử trong mảng JSON.

    • ________ 194 ** ________ 195 đánh giá tất cả các đường dẫn bắt đầu bằng tiền tố được đặt tên và kết thúc với hậu tố được đặt tên.

  • Một đường dẫn không tồn tại trong tài liệu (đánh giá dữ liệu không tồn tại) đánh giá thành

    mysql> CREATE TABLE t1 (jdoc JSON);
    Query OK, 0 rows affected (0.20 sec)
    
    mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> INSERT INTO t1 VALUES('[1, 2,');
    ERROR 3140 (22032) at line 2: Invalid JSON text:
    "Invalid value." at position 6 in value (or column) '[1, 2,'.
    1.

Đặt

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
75 Tham khảo mảng JSON này với ba yếu tố:

["abc", 10, null, true, false]
5

Sau đó:

  • $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    98 đánh giá thành
    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    99.

  • if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    00 đánh giá đến
    if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    01.

  • if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    02 Đánh giá thành
    if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    03.

  • if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    04 đánh giá thành
    mysql> CREATE TABLE t1 (jdoc JSON);
    Query OK, 0 rows affected (0.20 sec)
    
    mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> INSERT INTO t1 VALUES('[1, 2,');
    ERROR 3140 (22032) at line 2: Invalid JSON text:
    "Invalid value." at position 6 in value (or column) '[1, 2,'.
    1 (nó đề cập đến phần tử mảng thứ tư, không tồn tại).

Bởi vì

if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
00 và
if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
02 đánh giá các giá trị không quan trọng, chúng có thể được sử dụng làm cơ sở cho các biểu thức đường dẫn cụ thể hơn chọn các giá trị lồng nhau. Ví dụ:

  • if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    08 Đánh giá thành
    if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    09.

  • if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    10 đánh giá thành
    if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    11.

  • if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    12 đánh giá thành
    if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    13.

  • if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    14 đánh giá thành
    if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    15.

Như đã đề cập trước đây, các thành phần đường dẫn mà các khóa tên phải được trích dẫn nếu tên khóa chưa được trích xuất không hợp pháp trong các biểu thức đường dẫn. Đặt

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
75 Tham khảo giá trị này:

["abc", 10, null, true, false]
6

Cả hai khóa đều chứa một không gian và phải được trích dẫn:

  • if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    17 đánh giá thành
    if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    18.

  • if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    19 đánh giá thành
    if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    20.

Các đường dẫn sử dụng Wildcards đánh giá thành một mảng có thể chứa nhiều giá trị:

["abc", 10, null, true, false]
7

Trong ví dụ sau, đường dẫn

if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
21 đánh giá thành nhiều đường dẫn (
if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
22 và
if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
23) và tạo ra một mảng các giá trị đường dẫn phù hợp:

["abc", 10, null, true, false]
8

Phạm vi từ các mảng JSON. & NBSP; Bạn có thể sử dụng các phạm vi với từ khóa

if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
24 để chỉ định các tập hợp con của mảng JSON. Ví dụ:
if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
25 bao gồm các phần tử thứ hai, thứ ba và thứ tư của một mảng, như được hiển thị ở đây:
You can use ranges with the
if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
24 keyword to specify subsets of JSON arrays. For example,
if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
25 includes the second, third, and fourth elements of an array, as shown here:

["abc", 10, null, true, false]
9

Cú pháp là

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
84 đến
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
08, trong đó
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
84 và
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
08, tương ứng là các chỉ số đầu tiên và cuối cùng của một loạt các phần tử từ mảng JSON.
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
08 phải lớn hơn
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
84;
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
84 phải lớn hơn hoặc bằng 0. Các phần tử mảng được lập chỉ mục bắt đầu bằng 0.
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
84 to
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
08
, where
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
84 and
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
08 are, respectively, the first and last indexes of a range of elements from a JSON array.
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
08 must be greater than
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
84;
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
84 must be greater than or equal to 0. Array elements are indexed beginning with 0.

Bạn có thể sử dụng các phạm vi trong bối cảnh nơi các ký tự đại diện được hỗ trợ.

Phần tử mảng ngoài cùng bên phải. & Nbsp; Từ khóa

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
86 được hỗ trợ như một từ đồng nghĩa với chỉ mục của phần tử cuối cùng trong một mảng. Các biểu thức của biểu mẫu cuối cùng -
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
08 có thể được sử dụng cho địa chỉ tương đối và trong các định nghĩa phạm vi, như thế này:
The
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
86 keyword is supported as a synonym for the index of the last element in an array. Expressions of the form last -
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
08
can be used for relative addressing, and within range definitions, like this:

{"k1": "value", "k2": 10}
0

Nếu đường dẫn được đánh giá theo giá trị không phải là một mảng, kết quả của việc đánh giá giống như khi giá trị đã được bọc trong một mảng một phần tử:

{"k1": "value", "k2": 10}
1

Bạn có thể sử dụng ________ 235-> ________ 177 với nhận dạng cột JSON và biểu thức đường dẫn JSON như một từ đồng nghĩa với

if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
37,
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
77). Xem Phần & NBSP; 12.18.3, Các chức năng mà tìm kiếm các giá trị JSON, để biết thêm thông tin. Xem thêm lập chỉ mục một cột được tạo để cung cấp chỉ mục cột JSON.

Một số chức năng lấy một tài liệu JSON hiện có, sửa đổi nó theo một cách nào đó và trả về tài liệu được sửa đổi kết quả. Biểu thức đường dẫn cho biết nơi nào trong tài liệu để thực hiện thay đổi. Ví dụ: các hàm

mysql> SELECT JSON_TYPE('["a", "b", 1]');
+----------------------------+
| JSON_TYPE('["a", "b", 1]') |
+----------------------------+
| ARRAY                      |
+----------------------------+

mysql> SELECT JSON_TYPE('"hello"');
+----------------------+
| JSON_TYPE('"hello"') |
+----------------------+
| STRING               |
+----------------------+

mysql> SELECT JSON_TYPE('hello');
ERROR 3146 (22032): Invalid data type for JSON data in argument 1
to function json_type; a JSON string or JSON type is required.
4,
if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
40 và
mysql> SELECT JSON_TYPE('["a", "b", 1]');
+----------------------------+
| JSON_TYPE('["a", "b", 1]') |
+----------------------------+
| ARRAY                      |
+----------------------------+

mysql> SELECT JSON_TYPE('"hello"');
+----------------------+
| JSON_TYPE('"hello"') |
+----------------------+
| STRING               |
+----------------------+

mysql> SELECT JSON_TYPE('hello');
ERROR 3146 (22032): Invalid data type for JSON data in argument 1
to function json_type; a JSON string or JSON type is required.
5 mỗi tài liệu JSON, cộng với một hoặc nhiều cặp giá trị đường dẫn mô tả nơi sửa đổi tài liệu và các giá trị sẽ sử dụng. Các chức năng khác nhau về cách chúng xử lý các giá trị hiện có và không tồn tại trong tài liệu.

Xem xét tài liệu này:

{"k1": "value", "k2": 10}
2

mysql> SELECT JSON_TYPE('["a", "b", 1]');
+----------------------------+
| JSON_TYPE('["a", "b", 1]') |
+----------------------------+
| ARRAY                      |
+----------------------------+

mysql> SELECT JSON_TYPE('"hello"');
+----------------------+
| JSON_TYPE('"hello"') |
+----------------------+
| STRING               |
+----------------------+

mysql> SELECT JSON_TYPE('hello');
ERROR 3146 (22032): Invalid data type for JSON data in argument 1
to function json_type; a JSON string or JSON type is required.
4 Thay thế các giá trị cho các đường dẫn tồn tại và thêm các giá trị cho các đường dẫn không tồn tại:.

{"k1": "value", "k2": 10}
3

Trong trường hợp này, đường dẫn

if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
43 chọn một giá trị hiện có (
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
30), được thay thế bằng giá trị theo đối số đường dẫn (
if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
45). Đường dẫn
if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
46 không tồn tại, do đó, giá trị tương ứng (
if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
47) được thêm vào giá trị được chọn bởi
if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
02.

if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
40 thêm các giá trị mới nhưng không thay thế các giá trị hiện có:

{"k1": "value", "k2": 10}
4

mysql> SELECT JSON_TYPE('["a", "b", 1]');
+----------------------------+
| JSON_TYPE('["a", "b", 1]') |
+----------------------------+
| ARRAY                      |
+----------------------------+

mysql> SELECT JSON_TYPE('"hello"');
+----------------------+
| JSON_TYPE('"hello"') |
+----------------------+
| STRING               |
+----------------------+

mysql> SELECT JSON_TYPE('hello');
ERROR 3146 (22032): Invalid data type for JSON data in argument 1
to function json_type; a JSON string or JSON type is required.
5 thay thế các giá trị hiện có và bỏ qua các giá trị mới:

{"k1": "value", "k2": 10}
5

Các cặp giá trị đường dẫn được đánh giá từ trái sang phải. Tài liệu được tạo ra bằng cách đánh giá một cặp trở thành giá trị mới mà cặp tiếp theo được đánh giá.

mysql> SELECT JSON_TYPE('["a", "b", 1]');
+----------------------------+
| JSON_TYPE('["a", "b", 1]') |
+----------------------------+
| ARRAY                      |
+----------------------------+

mysql> SELECT JSON_TYPE('"hello"');
+----------------------+
| JSON_TYPE('"hello"') |
+----------------------+
| STRING               |
+----------------------+

mysql> SELECT JSON_TYPE('hello');
ERROR 3146 (22032): Invalid data type for JSON data in argument 1
to function json_type; a JSON string or JSON type is required.
6 lấy một tài liệu JSON và một hoặc nhiều đường dẫn chỉ định các giá trị sẽ bị xóa khỏi tài liệu. Giá trị trả về là tài liệu gốc trừ đi các giá trị được chọn bởi các đường dẫn tồn tại trong tài liệu:

{"k1": "value", "k2": 10}
6

Các đường dẫn có các hiệu ứng này:

  • if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    02 khớp với
    if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    53 và loại bỏ nó.

  • Trường hợp đầu tiên của

    if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    54 khớp với
    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    31 trong phần tử
    if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    56 và loại bỏ nó.

  • Ví dụ thứ hai của

    if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    54 không có gì phù hợp: phần tử đó đã bị xóa, đường dẫn không còn tồn tại và không có hiệu lực.

Cú pháp đường dẫn JSON

Nhiều chức năng JSON được MySQL hỗ trợ và được mô tả ở nơi khác trong hướng dẫn này (xem Phần & NBSP; 12,18, Chức năng của JSON JSON) yêu cầu một biểu thức đường dẫn để xác định một yếu tố cụ thể trong tài liệu JSON. Một đường dẫn bao gồm phạm vi của đường dẫn theo sau là một hoặc nhiều chân đường dẫn. Đối với các đường dẫn được sử dụng trong các hàm JSON của MySQL, phạm vi luôn là tài liệu được tìm kiếm hoặc hoạt động khác, được đại diện bởi một ký tự

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
75 hàng đầu. Chân đường dẫn được phân tách bằng các ký tự thời kỳ (
if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
59). Các tế bào trong các mảng được biểu thị bằng [
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
08], trong đó
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
08 là một số nguyên không âm. Tên của các khóa phải là các chuỗi được trích dẫn kép hoặc định danh ECMAscript hợp lệ (xem tên nhận dạng và định danh, trong đặc tả ngôn ngữ Ecmascript). Các biểu thức đường dẫn, như văn bản JSON, nên được mã hóa bằng bộ ký tự
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
13,
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
14 hoặc
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
10. Các mã hóa ký tự khác bị ép buộc ngầm vào
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
10. Cú pháp hoàn chỉnh được hiển thị ở đây:[
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
08]
, where
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
08 is a non-negative integer. Names of keys must be double-quoted strings or valid ECMAScript identifiers (see Identifier Names and Identifiers, in the ECMAScript Language Specification). Path expressions, like JSON text, should be encoded using the
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
13,
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
14, or
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
10 character set. Other character encodings are implicitly coerced to
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
10. The complete syntax is shown here:

{"k1": "value", "k2": 10}
7

Như đã lưu ý trước đây, trong MySQL, phạm vi của đường dẫn luôn là tài liệu được vận hành, được biểu thị là

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
75. Bạn có thể sử dụng
if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
67 làm từ đồng nghĩa với tài liệu trong biểu thức đường dẫn JSON.

Ghi chú

Một số triển khai hỗ trợ tham chiếu cột cho phạm vi của đường dẫn JSON; MySQL 8.0 không hỗ trợ những điều này.

Các mã thông báo ký tự đại diện

$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
90 và
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
91 được sử dụng như sau:

  • if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    70 đại diện cho các giá trị của tất cả các thành viên trong đối tượng.

  • $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    93 đại diện cho các giá trị của tất cả các ô trong mảng.

  • ________ 272] ** ________ 195 đại diện cho tất cả các đường dẫn bắt đầu bằng

    if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    74 và kết thúc với
    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    95.
    if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    74 là tùy chọn, trong khi
    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    95 là bắt buộc; Nói cách khác, một con đường có thể không kết thúc trong
    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    91.

    Ngoài ra, một đường dẫn có thể không chứa chuỗi

    if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    79.

Đối với các ví dụ cú pháp đường dẫn, hãy xem các mô tả về các hàm JSON khác nhau lấy đường dẫn làm đối số, chẳng hạn như

if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
80,
mysql> SELECT JSON_TYPE('["a", "b", 1]');
+----------------------------+
| JSON_TYPE('["a", "b", 1]') |
+----------------------------+
| ARRAY                      |
+----------------------------+

mysql> SELECT JSON_TYPE('"hello"');
+----------------------+
| JSON_TYPE('"hello"') |
+----------------------+
| STRING               |
+----------------------+

mysql> SELECT JSON_TYPE('hello');
ERROR 3146 (22032): Invalid data type for JSON data in argument 1
to function json_type; a JSON string or JSON type is required.
4 và
mysql> SELECT JSON_TYPE('["a", "b", 1]');
+----------------------------+
| JSON_TYPE('["a", "b", 1]') |
+----------------------------+
| ARRAY                      |
+----------------------------+

mysql> SELECT JSON_TYPE('"hello"');
+----------------------+
| JSON_TYPE('"hello"') |
+----------------------+
| STRING               |
+----------------------+

mysql> SELECT JSON_TYPE('hello');
ERROR 3146 (22032): Invalid data type for JSON data in argument 1
to function json_type; a JSON string or JSON type is required.
5. Ví dụ bao gồm việc sử dụng các ký tự đại diện
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
90 và
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
91, hãy xem mô tả về hàm
if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
85.

MySQL 8.0 cũng hỗ trợ ký hiệu phạm vi cho các tập hợp con của mảng JSON bằng cách sử dụng từ khóa

if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
24 (chẳng hạn như
if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
87), cũng như từ khóa
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
86 làm từ đồng nghĩa với phần tử ngoài cùng của mảng. Xem tìm kiếm và sửa đổi các giá trị JSON, để biết thêm thông tin và ví dụ.

So sánh và đặt hàng các giá trị JSON

Các giá trị JSON có thể được so sánh bằng cách sử dụng

if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
89,
if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
90,
if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
91,
if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
92,
if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
93,
if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
94,
if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
95 và
if (array_key_exists('sports', $me)){


                    $json = '$me['sports']'; PROBLEM IS HERE
                    $data = json_decode($json, true);
                    $sports = array();
                    foreach ($data as $item) {
                        $sports[] = $item['name'];
                    }

                    $user->fb_sports = $sports;
                }
96.

Các toán tử và chức năng so sánh sau đây chưa được hỗ trợ với các giá trị JSON:

  • if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    97

  • if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    98

  • if (array_key_exists('sports', $me)){
    
    
                        $json = '$me['sports']'; PROBLEM IS HERE
                        $data = json_decode($json, true);
                        $sports = array();
                        foreach ($data as $item) {
                            $sports[] = $item['name'];
                        }
    
                        $user->fb_sports = $sports;
                    }
    
    99

  • ["abc", 10, null, true, false]
    00

Một cách giải quyết cho các toán tử và chức năng so sánh chỉ được liệt kê là chuyển các giá trị JSON vào loại dữ liệu số hoặc chuỗi MySQL gốc để chúng có loại vô hướng không phải là JSON nhất quán.

So sánh các giá trị JSON diễn ra ở hai cấp độ. Mức so sánh đầu tiên dựa trên các loại JSON của các giá trị so sánh. Nếu các loại khác nhau, kết quả so sánh được xác định chỉ bằng loại có ưu tiên cao hơn. Nếu hai giá trị có cùng loại JSON, mức so sánh thứ hai xảy ra bằng cách sử dụng các quy tắc cụ thể loại.

Danh sách sau đây cho thấy các ưu tiên của các loại JSON, từ ưu tiên cao nhất đến thấp nhất. . Bất kỳ giá trị nào có loại JSON được liệt kê trước đó trong danh sách đều so với bất kỳ giá trị nào có loại JSON được liệt kê sau trong danh sách.

{"k1": "value", "k2": 10}
8

Đối với các giá trị JSON có cùng mức độ ưu tiên, các quy tắc so sánh là loại cụ thể:

  • ["abc", 10, null, true, false]
    02

    Các byte

    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    08 đầu tiên của hai giá trị được so sánh, trong đó
    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    08 là số byte trong giá trị ngắn hơn. Nếu các byte
    $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
    
    var_dump(json_decode($json));
    
    08 đầu tiên của hai giá trị là giống hệt nhau, giá trị ngắn hơn được đặt hàng trước giá trị dài hơn.

  • ["abc", 10, null, true, false]
    06

    Các quy tắc tương tự như đối với

    ["abc", 10, null, true, false]
    02.

  • ["abc", 10, null, true, false]
    08

    Các quy tắc tương tự như đối với

    ["abc", 10, null, true, false]
    02. Các giá trị
    ["abc", 10, null, true, false]
    08 là các giá trị không được phân loại là một trong các loại khác.

  • ["abc", 10, null, true, false]
    11

    Một giá trị đại diện cho một thời điểm sớm hơn được đặt hàng trước một giá trị đại diện cho một thời điểm sau đó. Nếu hai giá trị ban đầu đến từ các loại MySQL

    ["abc", 10, null, true, false]
    11 và
    ["abc", 10, null, true, false]
    13 tương ứng, chúng đều bằng nhau nếu chúng đại diện cho cùng một thời điểm.

  • ["abc", 10, null, true, false]
    14

    Các giá trị thời gian nhỏ hơn được đặt hàng trước giá trị lớn hơn.

  • ["abc", 10, null, true, false]
    15

    Ngày trước được đặt hàng trước ngày gần đây.

  • ["abc", 10, null, true, false]
    16

    Hai mảng JSON bằng nhau nếu chúng có cùng độ dài và giá trị ở các vị trí tương ứng trong các mảng bằng nhau.

    Nếu các mảng không bằng nhau, thứ tự của chúng được xác định bởi các phần tử ở vị trí đầu tiên có sự khác biệt. Mảng có giá trị nhỏ hơn ở vị trí đó được đặt hàng đầu tiên. Nếu tất cả các giá trị của mảng ngắn hơn bằng các giá trị tương ứng trong mảng dài hơn, mảng ngắn hơn được đặt hàng trước.

    Thí dụ:

    {"k1": "value", "k2": 10}
    9
  • ["abc", 10, null, true, false]
    17

    JSON Sai nghĩa đen ít hơn so với nghĩa đen của JSON.

  • ["abc", 10, null, true, false]
    18

    Hai đối tượng JSON bằng nhau nếu chúng có cùng một bộ khóa và mỗi phím có cùng giá trị trong cả hai đối tượng.

    Thí dụ:

    ["abc", 10, null, true, false]
    17

    JSON Sai nghĩa đen ít hơn so với nghĩa đen của JSON.

  • ["abc", 10, null, true, false]
    18

    Hai đối tượng JSON bằng nhau nếu chúng có cùng một bộ khóa và mỗi phím có cùng giá trị trong cả hai đối tượng.

    Thí dụ:

    ["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
    1

    ["abc", 10, null, true, false]
    17

    ["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
    2
  • JSON Sai nghĩa đen ít hơn so với nghĩa đen của JSON.

    ["abc", 10, null, true, false]
    18

    Hai đối tượng JSON bằng nhau nếu chúng có cùng một bộ khóa và mỗi phím có cùng giá trị trong cả hai đối tượng.

    • ["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
      0

    • Thứ tự của hai đối tượng không bằng nhau là không xác định nhưng xác định.

      ["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
      3

    ["abc", 10, null, true, false]
    19

    • Các chuỗi được đặt hàng từ vựng trên các byte

      $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
      
      var_dump(json_decode($json));
      
      08 đầu tiên của biểu diễn
      $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
      
      var_dump(json_decode($json));
      
      10 của hai chuỗi được so sánh, trong đó
      $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
      
      var_dump(json_decode($json));
      
      08 là chiều dài của chuỗi ngắn hơn. Nếu các byte
      $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
      
      var_dump(json_decode($json));
      
      08 đầu tiên của hai chuỗi giống hệt nhau, chuỗi ngắn hơn được coi là nhỏ hơn chuỗi dài hơn.

      ["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
      4

      Thứ tự này tương đương với thứ tự các chuỗi SQL với đối chiếu

      $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
      
      var_dump(json_decode($json));
      
      11. Bởi vì
      $json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';
      
      var_dump(json_decode($json));
      
      11 là một đối chiếu nhị phân, so sánh các giá trị JSON nhạy cảm với trường hợp:

    • ["abc", 10, null, true, false]
      26,
      ["abc", 10, null, true, false]
      27

      ["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
      5

Các giá trị JSON có thể chứa các số giá trị chính xác và số giá trị xấp xỉ. Để thảo luận chung về các loại số này, xem Phần & NBSP; 9.1.2, chữ số chữ số.

Các quy tắc để so sánh các loại số MySQL gốc được thảo luận trong Phần & NBSP; 12.3, Chuyển đổi loại trong đánh giá biểu thức, nhưng các quy tắc để so sánh các số trong các giá trị JSON khác nhau phần nào:

Trong một so sánh giữa hai cột sử dụng MySQL ["abc", 10, null, true, false]28 và ["abc", 10, null, true, false]27, tương ứng, người ta biết rằng tất cả các so sánh liên quan đến một số nguyên và gấp đôi, do đó, số nguyên được chuyển đổi thành gấp đôi cho tất cả các hàng. Đó là, các số giá trị chính xác được chuyển đổi thành số giá trị xấp xỉ.

Mặt khác, nếu truy vấn so sánh hai cột JSON chứa số, thì không thể biết trước liệu các số có số nguyên hay gấp đôi. Để cung cấp hành vi nhất quán nhất trên tất cả các hàng, MySQL chuyển đổi số giá trị xấp xỉ thành các số giá trị chính xác. Thứ tự kết quả là nhất quán và không mất độ chính xác cho các số giá trị chính xác. Ví dụ, với vô hướng 9223372036854775805, 9223372036854775806, 9223372036854775807 và 9.223372036854776e18

Là so sánh JSON để sử dụng các quy tắc so sánh số không phải là json, có thể xảy ra thứ tự không nhất quán. Các quy tắc so sánh MySQL thông thường cho các số mang lại thứ tự sau:

So sánh số nguyên: (không được xác định cho 9.223372036854776E18) So sánh kép:
Để so sánh bất kỳ giá trị JSON nào với SQL
mysql> CREATE TABLE t1 (jdoc JSON);
Query OK, 0 rows affected (0.20 sec)

mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO t1 VALUES('[1, 2,');
ERROR 3140 (22032) at line 2: Invalid JSON text:
"Invalid value." at position 6 in value (or column) '[1, 2,'.
1, kết quả là
["abc", 10, null, true, false]
31.
Để so sánh các giá trị JSON và không phải là JSON, giá trị không phải là JSON được chuyển đổi thành JSON theo các quy tắc trong bảng sau, sau đó các giá trị được so sánh như được mô tả trước đây. Để so sánh các giá trị JSON và không phải là JSON, giá trị không phải là JSON được chuyển đổi thành JSON theo các quy tắc trong bảng sau, sau đó các giá trị được so sánh như được mô tả trước đây.
Chuyển đổi giữa các giá trị JSON và không json Bảng sau đây cung cấp một bản tóm tắt các quy tắc mà MySQL tuân theo khi sử dụng giữa các giá trị JSON và các giá trị của các loại khác:Bảng & NBSP; 11.3 & NBSP; Quy tắc chuyển đổi JSON
loại khácDiễn viên (loại khác là json)Giá trị JSON được tuần tự hóa thành chuỗi
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
10, sau đó chuyển sang mã hóa ký tự khác. Kết quả có thể không có ý nghĩa.
mysql> CREATE TABLE t1 (jdoc JSON);
Query OK, 0 rows affected (0.20 sec)

mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO t1 VALUES('[1, 2,');
ERROR 3140 (22032) at line 2: Invalid JSON text:
"Invalid value." at position 6 in value (or column) '[1, 2,'.
1
Kết quả trong giá trị
mysql> CREATE TABLE t1 (jdoc JSON);
Query OK, 0 rows affected (0.20 sec)

mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO t1 VALUES('[1, 2,');
ERROR 3140 (22032) at line 2: Invalid JSON text:
"Invalid value." at position 6 in value (or column) '[1, 2,'.
1 của loại JSON.
Không áp dụng.
Các loại hình họcGiá trị hình học được chuyển đổi thành tài liệu JSON bằng cách gọi
["abc", 10, null, true, false]
40.
Hoạt động bất hợp pháp. Giải pháp thay thế: Chuyển kết quả của Cast (____ 106 là char) cho
["abc", 10, null, true, false]
42.CAST(
$json = '{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}';

var_dump(json_decode($json));
06 AS CHAR)
to
["abc", 10, null, true, false]
42.
Tất cả các loại khácKết quả trong một tài liệu JSON bao gồm một giá trị vô hướng duy nhất.Thành công nếu tài liệu JSON bao gồm một giá trị vô hướng duy nhất của loại mục tiêu và giá trị vô hướng đó có thể được chuyển theo loại đích. Nếu không, trả lại
mysql> CREATE TABLE t1 (jdoc JSON);
Query OK, 0 rows affected (0.20 sec)

mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO t1 VALUES('[1, 2,');
ERROR 3140 (22032) at line 2: Invalid JSON text:
"Invalid value." at position 6 in value (or column) '[1, 2,'.
1 và tạo ra một cảnh báo.

["abc", 10, null, true, false]
44 và
["abc", 10, null, true, false]
45 cho các giá trị JSON hoạt động theo các nguyên tắc này:

  • Đặt hàng các giá trị vô hướng JSON sử dụng các quy tắc tương tự như trong cuộc thảo luận trước đó.

  • Đối với các loại tăng dần, SQL

    mysql> CREATE TABLE t1 (jdoc JSON);
    Query OK, 0 rows affected (0.20 sec)
    
    mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> INSERT INTO t1 VALUES('[1, 2,');
    ERROR 3140 (22032) at line 2: Invalid JSON text:
    "Invalid value." at position 6 in value (or column) '[1, 2,'.
    1 đặt hàng trước tất cả các giá trị JSON, bao gồm cả JSON NULL theo nghĩa đen; Đối với các loại giảm dần, SQL
    mysql> CREATE TABLE t1 (jdoc JSON);
    Query OK, 0 rows affected (0.20 sec)
    
    mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> INSERT INTO t1 VALUES('[1, 2,');
    ERROR 3140 (22032) at line 2: Invalid JSON text:
    "Invalid value." at position 6 in value (or column) '[1, 2,'.
    1 đặt hàng sau tất cả các giá trị JSON, bao gồm cả JSON NULL theo nghĩa đen.

  • Các khóa sắp xếp cho các giá trị JSON được ràng buộc bởi giá trị của biến hệ thống

    ["abc", 10, null, true, false]
    48, do đó các khóa chỉ khác nhau sau khi các byte
    ["abc", 10, null, true, false]
    48 đầu tiên so sánh bằng nhau.

  • Việc sắp xếp các giá trị không phải là hiện tại không được hỗ trợ và cảnh báo xảy ra.

Để phân loại, có thể có lợi khi đúc một vô hướng JSON cho một số loại MySQL bản địa khác. Ví dụ: nếu một cột có tên

["abc", 10, null, true, false]
50 chứa các đối tượng JSON có thành viên bao gồm khóa
["abc", 10, null, true, false]
51 và giá trị không âm, hãy sử dụng biểu thức này để sắp xếp các giá trị
["abc", 10, null, true, false]
51:

["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
6

Nếu có một cột được tạo được xác định để sử dụng biểu thức tương tự như trong

["abc", 10, null, true, false]
44, trình tối ưu hóa MySQL sẽ nhận ra điều đó và xem xét sử dụng chỉ mục cho kế hoạch thực thi truy vấn. Xem Phần & NBSP; 8.3.11, Trình tối ưu hóa sử dụng các chỉ mục cột được tạo ra.

Tổng hợp các giá trị JSON

Để tổng hợp các giá trị JSON, các giá trị SQL

mysql> CREATE TABLE t1 (jdoc JSON);
Query OK, 0 rows affected (0.20 sec)

mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO t1 VALUES('[1, 2,');
ERROR 3140 (22032) at line 2: Invalid JSON text:
"Invalid value." at position 6 in value (or column) '[1, 2,'.
1 bị bỏ qua như đối với các loại dữ liệu khác. Các giá trị không-____ 71 được chuyển đổi thành loại số và tổng hợp, ngoại trừ
["abc", 10, null, true, false]
56,
["abc", 10, null, true, false]
57 và
["abc", 10, null, true, false]
58. Việc chuyển đổi thành số sẽ tạo ra một kết quả có ý nghĩa cho các giá trị JSON là vô hướng số, mặc dù (tùy thuộc vào giá trị) cắt và mất độ chính xác có thể xảy ra. Chuyển đổi sang số lượng các giá trị JSON khác có thể không tạo ra kết quả có ý nghĩa.

Tôi có thể lưu trữ mảng json trong mysql không?

MySQL hỗ trợ kiểu dữ liệu JSON gốc được xác định bởi RFC 7159 cho phép truy cập hiệu quả vào dữ liệu trong các tài liệu JSON (ký hiệu đối tượng JavaScript). Kiểu dữ liệu JSON cung cấp các lợi thế này so với việc lưu trữ các chuỗi định dạng JSON trong một cột chuỗi: Xác thực tự động các tài liệu JSON được lưu trữ trong các cột JSON. that enables efficient access to data in JSON (JavaScript Object Notation) documents. The JSON data type provides these advantages over storing JSON-format strings in a string column: Automatic validation of JSON documents stored in JSON columns.

Tôi có thể lưu trữ một mảng trong mysql không?

Mặc dù một mảng là một trong những loại dữ liệu phổ biến nhất trong thế giới lập trình, MySQL thực sự không hỗ trợ lưu trực tiếp loại mảng.Bạn không thể tạo một cột bảng loại mảng trong MySQL.Dữ liệu loại mảng lưu trữ dễ dàng nhất trong MySQL là sử dụng kiểu dữ liệu JSON.MySQL actually doesn't support saving an array type directly. You can't create a table column of array type in MySQL. The easiest way store array type data in MySQL is to use the JSON data type.

JSON được lưu trữ như thế nào trong MySQL?

MySQL lưu trữ các tài liệu JSON ở định dạng nội bộ cho phép truy cập nhanh đọc nhanh vào các thành phần tài liệu.Định dạng nhị phân JSON được cấu trúc theo cách cho phép máy chủ tìm kiếm các giá trị trong tài liệu JSON trực tiếp bằng khóa hoặc chỉ mục mảng, rất nhanh.in an internal format that allows quick read access to document elements. The JSON binary format is structured in the way that permits the server to search for values within the JSON document directly by key or array index, which is very fast.

Hạn chế của các cột JSON trong MySQL là gì?

Hạn chế?Nếu JSON của bạn có nhiều trường có cùng một khóa, chỉ có một trong số đó, cái cuối cùng, sẽ được giữ lại.Hạn chế khác là MySQL không hỗ trợ lập chỉ mục các cột JSON, điều đó có nghĩa là việc tìm kiếm thông qua các tài liệu JSON của bạn có thể dẫn đến quét bảng đầy đủ.MySQL doesn't support indexing JSON columns, which means that searching through your JSON documents could result in a full table scan.