>  기사  >  백엔드 개발  >  PHP json 데이터를 배열로 변환

PHP json 데이터를 배열로 변환

王林
王林원래의
2023-05-23 11:14:36365검색

PHP에서는 처리를 위해 JSON 데이터를 배열 형식으로 변환해야 하는 경우가 있습니다. 이때 json_decode() 함수를 사용하여 JSON 데이터를 PHP 배열로 변환할 수 있습니다. 이 기사에서는 json_decode() 함수를 사용하여 JSON 데이터를 배열로 변환하고 몇 가지 일반적인 질문에 답하는 방법을 소개합니다.

JSON은 이해하기 쉽고, 사용하기 쉽고, 확장하기 쉽다는 장점으로 인해 데이터 전송에 널리 사용되는 경량 데이터 교환 형식입니다. PHP는 효율적이고 빠르며 배우고 사용하기 쉬운 약한 유형의 프로그래밍 언어입니다. JSON 형식은 PHP에서 기본적으로 지원되므로 개발 중에 PHP를 사용하여 JSON 데이터를 처리하는 것이 매우 편리합니다.

JSON 데이터를 배열로 변환하려면 json_decode() 함수를 사용하세요.

다음은 JSON 데이터를 배열로 변환하는 샘플 코드입니다.

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

$arr = json_decode($json, true);

var_dump($arr);

출력 결과:

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

보시다시피 json_decode() 함수는 JSON 데이터를 PHP 배열로 변환합니다. 이 함수의 두 번째 매개변수는 true 또는 false로 설정할 수 있으며, true로 설정하면 연관 배열을 반환하고, false로 설정하거나 설정하지 않으면 개체를 반환합니다.

다음은 객체를 반환하는 샘플 코드입니다.

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

$obj = json_decode($json);

var_dump($obj);

출력 결과:

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

JSON 문자열을 구문 분석할 때 문자 인코딩이 UTF-8이 아닌 경우 UTF-8로 변환해야 합니다. 인코딩:

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

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

$arr = json_decode($json, true);

var_dump($arr);

FAQ

1. JSON 구문 분석 오류를 처리하는 방법은 무엇입니까?

JSON 데이터를 처리하는 과정에서 JSON 데이터 형식 문제나 인코딩 형식 문제로 인해 파싱 오류가 발생할 수 있습니다. 이때 json_last_error() 함수를 사용하면 파싱 오류의 원인을 알아낼 수 있습니다. 이 함수는 JSON 구문 분석 오류의 유형을 나타내는 숫자를 반환합니다. 다음은 오류 유형의 정의입니다.

  • JSON_ERROR_NONE: 오류 없음, 구문 분석에 성공했습니다.
  • JSON_ERROR_DEPTH: JSON 데이터가 너무 복잡하고 설정된 최대 깊이를 초과합니다.
  • JSON_ERROR_STATE_MISMATCH: JSON 데이터 형식이 잘못되었습니다.
  • JSON_ERROR_CTRL_CHAR: 잘못된 제어 문자가 있습니다.
  • JSON_ERROR_SYNTAX: JSON 데이터에 구문 오류가 있습니다.
  • JSON_ERROR_UTF8: JSON 데이터가 UTF-8로 인코딩되지 않았습니다.

파싱 오류의 원인을 얻으려면 다음 코드를 사용하세요:

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

$arr = json_decode($json, true);

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

var_dump($arr);

출력 결과:

JSON 数据存在语法错误
NULL

위에서 보듯이 json_last_error() 함수는 파싱 오류의 원인을 쉽게 얻을 수 있으므로, 문제.

2. 비표준 JSON 형식 문제를 처리하는 방법은 무엇입니까?

실제 사용 시 일부 JSON 데이터는 마지막 속성 값 뒤에 쉼표를 사용하는 등 가장 표준화된 형식이 아닐 수 있습니다. json_decode() 함수를 사용하여 이 JSON 데이터를 구문 분석하면 NULL이 반환됩니다. 이 시점에서는 처리를 위해 타사 라이브러리를 사용할 수 있습니다.

다음은 json5 라이브러리를 사용하여 JSON 비정규 형식을 처리하는 샘플 코드입니다.

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

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

use Json5Parser;

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

var_dump($arr);

출력 결과:

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

위에 표시된 것처럼 json5 라이브러리를 사용하면 JSON 비정규 형식 문제를 쉽게 처리할 수 있습니다.

3. JSON 데이터의 도메인 간 액세스 문제를 처리하는 방법은 무엇입니까?

JSON 데이터의 도메인 간 액세스 문제는 보안상의 이유로 브라우저가 프런트 엔드가 ajax 요청의 ajax 요청을 통해 다른 도메인의 리소스에 액세스하는 것을 금지한다는 것을 의미합니다. 이때 몇 가지 설정을 해줘야 합니다.

다음은 PHP를 사용하여 도메인 간 액세스를 달성하기 위한 샘플 코드입니다.

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

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

echo $json;

위에 표시된 것처럼 PHP에서 Access-Control-Allow-Origin 헤더를 설정하면 다른 도메인 이름에서 도메인 간 액세스가 허용됩니다.

결론

지금까지 json_decode() 함수를 사용하여 JSON 데이터를 배열로 변환하는 방법과 JSON 데이터 처리 시 발생하는 몇 가지 일반적인 문제를 해결하는 방법을 소개했습니다. 이 글이 모든 사람에게 도움이 되기를 바랍니다.

위 내용은 PHP json 데이터를 배열로 변환의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.