목차
PHP에서 JSON 데이터가 어떻게 처리되는지 이해하십시오
구문 분석에 json_decode () 함수를 사용하십시오
오류 분석 : 직접 액세스 할 수없는 이유
메모 및 모범 사례
요약
백엔드 개발 PHP 튜토리얼 JSON 문자열을 효율적으로 구문 분석하고 PHP에서 지정된 데이터를 추출합니다.

JSON 문자열을 효율적으로 구문 분석하고 PHP에서 지정된 데이터를 추출합니다.

Oct 06, 2025 am 07:09 AM

JSON 문자열을 효율적으로 구문 분석하고 PHP에서 지정된 데이터를 추출합니다.

이 기사는 PHP에서 JSON 형식으로 데이터를 올바르게 구문 분석하는 방법을 독자에게 안내하고 IT에서 필요한 특정 필드를 추출하는 것을 목표로합니다. 이 기사는 JSON 문자열이 어레이에서 직접 액세스 할 수없는 이유를 자세히 설명하고 JSON_DECODE () 함수를 사용하여 PHP 연관 배열로 변환하는 방법을 보여 주므로 일반적인 "불법 문자열 오프셋"오류를 피하고 데이터 액세스의 정확성과 효율성을 보장합니다.

현대 웹 개발에서 JSON (JavaScript 객체 표기법)은 널리 사용되는 데이터 교환 형식이되었습니다. PHP 응용 프로그램이 외부 API와 상호 작용하면 일반적으로 JSON 형식의 응답 데이터를 수신합니다. 그러나 이러한 JSON 문자열에서 필요한 정보를 올바르게 추출하는 방법은 많은 개발자가 처음 만났을 때 발생할 수있는 과제입니다.

PHP에서 JSON 데이터가 어떻게 처리되는지 이해하십시오

HTTP 요청 (예 : CURL 사용)을 통해 JSON 데이터를 수신하면 PHP는이 데이터를 일반 문자열 로 취급합니다. 예를 들어 다음은 일반적인 JSON 응답 예입니다.

 { "accesstoken": "eyjhbgcioijsuzuxmij9.e", "reformantoken": "qerx0buxyx6wxfj5axcah21uuyo8ad/uliaglp3lu2lmxgnx0twbydm njyfwack9av50uz3fsz/2nhjwii BA == ","FERFIRESIN ":"2021-11-11T10 : 20 : 33Z ","VesuredAt ":"2021-11-11T10 : 05 : 33Z ","Tokentype ":"Bearer "}

curl_exec ()가 위의 문자열을 반환하여 변수 $ 응답에 할당하면 $ 응답 유형은 문자열입니다. 현재 $ response [ 'AccessToken']와 같은 배열 위시를 사용하여 직접 키 값에 액세스하려고하면 PHP는 경고를 경고합니다 : 불법 문자열 오프셋 'AccessToken'. PHP는 문자열을 연관 배열로 직접 처리 할 수 ​​없기 때문입니다.

구문 분석에 json_decode () 함수를 사용하십시오

JSON 문자열에서 데이터를 올바르게 추출하려면 먼저 PHP가 이해할 수있는 데이터 구조, 즉 연관 배열 또는 객체 로 변환해야합니다. PHP는 내장 기능 JSON_DECODE ()를 제공 하여이 작업을 완료합니다.

JSON_DECODE () 함수의 기본 구문은 다음과 같습니다.

 Mixed JSON_DECODE (String $ json [, bool $ assoc = false [, int $ depth = 512 [, int $ 옵션 = 0]]))))

안에:

  • $ JSON : 필수, JSON 문자열이 디코딩되어야합니다.
  • $ Assoc : 선택 사항. true로 설정하면 JSON_DECODE ()는 연관 배열을 반환합니다. False (기본값)로 설정하면 객체가 반환됩니다. 키 이름으로 데이터에 액세스 해야하는 대부분의 시나리오의 경우 연관 배열을 얻으려면 true로 설정하는 것이 좋습니다.

다음은 JSON 문자열을 올바르게 구문 분석하고 AccessToken을 추출하기위한 샘플 코드입니다.

  php

// curl request에서 얻은 JSON 문자열을 시뮬레이션 // 실제 응용 프로그램에서 $ 응답은 curl_exec ($ curl) $ responsejsongring =의 반환 값입니다. '{ "accesstoken": "eyjhbgcioijsuzuxmij9.e", "refreshtoken": "qerx0buxyx6wxfj5axcah21uuyo8ad/uliaglp3lu2lmxgnx0twbydm njyfwack9av50uz3fsz/2nhjwii bl == ","expiresin ":"2021-11-11T10 : 20 : 33Z ","vesuredat ":"2021-11-11T10 : 05 : 33Z ","Tokentype ":"bearer "} ';

// JSON_DECODE ()를 사용하여 JSON 문자열을 php 연관 배열로 디코딩하여 제 2 매개 변수가 true로 설정되어 객체 $ data 대신에 연관 배열이 반환됨을 나타냅니다.

// 디코딩이 성공했는지 여부와 필요한 키가 존재하는지 (json_last_error () === json_error_none && isset ($ data [ 'accessToken'])) {
    // AccessToken의 획득을 성공적으로 획득합니다
    $ AccessToken = $ data [ 'AccessToken'];
    Echo "Access Token :". $ accesstoken. php_eol;
} 또 다른 {
    // 디코딩이 실패했거나 키가 존재하지 않습니다. "오류 디코딩 JSON 또는 'AccessToken'을 찾을 수 없습니다." . php_eol;
    에코 "JSON 오류 :". JSON_LAST_ERROR_MSG (). php_eol;
}

// 완전한 컬 요청 프로세스를 가정합니다.
$ curl = curl_init ();
// ... 컬 구성 ...
$ response = curl_exec ($ curl);
curl_close ($ curl);

$ data = json_decode ($ response, true);
if (JSON_LAST_ERROR () === JSON_ERROR_NONE && isset ($ data [ 'accessToken']) {
    echo $ data [ 'accesstoken'];
} 또 다른 {
    에코 "접근 토큰을 얻지 못했습니다.";
}
*/
?>

위 코드에서 :

  1. $ responsejsonstring 컬 또는 기타 수단을 통해 얻은 원래 JSON 문자열을 시뮬레이션합니다.
  2. json_decode ($ responsejsongring, true)이 JSON 문자열을 PHP 연관 배열로 변환하여 $ data 변수에 할당합니다.
  3. 이제 $ Data는 이미 표준 PHP 연관 배열이며 $ Data [ 'AccessToken']의 친숙한 구문을 통해 AccessToken 필드에 안전하게 액세스 할 수 있습니다.

오류 분석 : 직접 액세스 할 수없는 이유

다시 말하지만, 경고의 핵심 이유 : 불법 문자열 오프셋 'AccessToken'오류는 문자열 ($ 응답)을 연관 배열로 사용하고 문자열 키 ( 'AccessToken')로 액세스하기 때문입니다. PHP의 문자열 유형은 키 이름을 기반으로 액세스 할 수있는이 기능을 제공하지 않습니다. JSON_DECODE ()가 처리 한 배열 또는 객체만이 유형의 액세스에서 액세스 할 수 있습니다.

메모 및 모범 사례

  1. 오류 처리 : JSON_DECODE ()가 실패하면 NULL을 반환합니다. 따라서 디코딩 된 데이터에 액세스하기 전에 json_decode ()의 리턴 값을 확인하고 JSON_LAST_ERROR () 및 JSON_LAST_ERROR_MSG () 함수를 사용하여 세부 오류 정보를 얻으려면 디버깅에 매우 중요합니다.
     $ data = json_decode ($ response, true);
    if ($ data === null && json_last_error ()! == json_error_none) {
        에코 "JSON 디코딩 오류 :". JSON_LAST_ERROR_MSG ();
        // 로깅 또는 반환 오류 메시지와 같은 오류 처리} else {
        // 계속 $ 데이터를 처리합니다
    }
  2. 키 존재 점검 : 항상 isset () 또는 array_key_exists ()를 사용하여 배열 또는 객체에서 키에 액세스하려고 시도하기 전에 키가 존재하는지 확인하여 키가없는 키로 인한 경고 나 오류를 피하십시오.
     if (isset ($ data [ 'accessToken']) {
        $ AccessToken = $ data [ 'AccessToken'];
        // ...
    } 또 다른 {
        JSON 데이터에서는 "키 'AccessToken'을 찾을 수 없습니다.";
    }
  3. 객체 및 연관 배열 선택 :
    • json_decode ($ jsonstring) (기본값) : stdclass 객체를 반환합니다. $ data-> accesstoken을 통해 속성에 액세스 할 수 있습니다.
    • json_decode ($ jsonstring, true) : 연관 배열을 반환합니다. $ data [ 'accesstoken]]을 통해 요소에 액세스 할 수 있습니다. 선택할 방법은 개인 선호도 및 프로젝트 요구에 따라 다릅니다. 일반적으로 연관 어레이를 사용하는 것은 PHP에서 작동하는 것이 더 유연합니다.

요약

JSON 문자열에서 특정 데이터를 추출하는 것은 PHP 개발에서 일반적인 작업입니다. 열쇠는 원래 JSON 데이터가 문자열이라는 것을 이해하는 것입니다. 이는 JSON_DECODE () 함수를 통해 PHP 연관 배열 또는 객체로 변환해야합니다. 항상 오류 확인을 수행하고 주요 존재 점검은 강력하고 신뢰할 수있는 코드를 작성하는 데 중요한 관행입니다. 이 가이드 라인을 따르면 JSON 데이터를 효율적이고 안전하게 처리하여 일반적인 "불법 문자열 오프셋"오류를 피할 수 있습니다.

위 내용은 JSON 문자열을 효율적으로 구문 분석하고 PHP에서 지정된 데이터를 추출합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Stock Market GPT

Stock Market GPT

더 현명한 결정을 위한 AI 기반 투자 연구

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제

PHP에서 이메일 주소가 유효한지 확인하는 방법은 무엇입니까? PHP에서 이메일 주소가 유효한지 확인하는 방법은 무엇입니까? Sep 21, 2025 am 04:07 AM

usefilter_var () tovalidateemailsyntaxandcheckdnsrr () toverifydomainmxrecords.example : $ email = "user@example.com"; if (f ilter_var ($ 이메일, filter_validate_email) && checkdnsrr (Explode ( '@', $ email) [1], 'mx')) {echo "validandDeliverableEmail & qu

PHP에서 물체를 딥 카피 나 복제하는 방법은 무엇입니까? PHP에서 물체를 딥 카피 나 복제하는 방법은 무엇입니까? Sep 21, 2025 am 12:30 AM

AseUnserialize (Serialize ($ obj))는 AllDataisserializable 이하의 경우 FordeepCopying; 그렇지 않으면, ubstract__clone () tomanuallyduplicateNestEdObjectSandavoidshartReferences.

PHP에서 두 배열을 병합하는 방법은 무엇입니까? PHP에서 두 배열을 병합하는 방법은 무엇입니까? Sep 21, 2025 am 12:26 AM

USEARRAY_MERGE () TOCOMBINEARRAYS, DUCRITINGDUPLICATESTRINGKEYSANDENTEXINGUMERICEYS; FORSIMPLERCONCATENATION, 특히 인포드 55.6, USETHESPLATOPERATOR [... $ array1, ... $ array2].

PHP 프로젝트에서 네임 스페이스를 사용하는 방법은 무엇입니까? PHP 프로젝트에서 네임 스페이스를 사용하는 방법은 무엇입니까? Sep 21, 2025 am 01:28 AM

네임 스페이스 인 네임 스페이스 inphorganizecodecodecodeandnamingnamingconflictsbygroupingclasses, 인터페이스, 함수, andconstantsOnspecificname.2.defineanamesUsUsingThenamesPaceyWordAtTHETOPOFOFILE, AFFORBINSPACENAME, suchATESKEYSTOI

PHP의 마법 방법은 무엇이며`__call ()`및`__get ()`의 예를 제공합니다. PHP의 마법 방법은 무엇이며`__call ()`및`__get ()`의 예를 제공합니다. Sep 20, 2025 am 12:50 AM

The__call ()는 MethodsibleorundorundeRunded에서 정의 될 때 MethodStrigged를 정의하고, themodnameandarguments, asshowningwhendingderdefinedmethodslikesayhello ()

PHP로 데이터베이스에서 레코드를 업데이트하는 방법은 무엇입니까? PHP로 데이터베이스에서 레코드를 업데이트하는 방법은 무엇입니까? Sep 21, 2025 am 04:47 AM

toupdateadaBasereCordInphp, FirstConnectusingpdoorMysqli, whenEseprepredStatementStoExecuteAcureCuresqlupDateQuery.example : $ pdo = newpdo ( "mysql : host = localhost; dbname = your_database", $ username, $ username, $ sql = "squer erestemail);

MySQL 조건부 응집 : 필드의 조건 합계 및 계산을 구현하기위한 사용 사례 명령문 MySQL 조건부 응집 : 필드의 조건 합계 및 계산을 구현하기위한 사용 사례 명령문 Sep 16, 2025 pm 02:39 PM

이 기사에서는 케이스 문을 사용하여 MySQL에서 조건부 집계를 수행하여 특정 필드의 조건부 합산 및 계산 방법에 대해 자세히 설명합니다. 실제 구독 시스템 사례를 통해 레코드 상태 (예 : "END"및 "CANCEL"과 같은 총 기간 및 이벤트 수를 동적으로 계산하여 복잡한 조건부 집계의 요구를 충족시킬 수없는 전통적인 합계 기능의 한계를 극복하는 방법을 보여줍니다. 튜토리얼은 합 함수로 사례 문의 적용을 자세히 분석하고 왼쪽 조인의 가능한 널 값을 다룰 때 Coalesce의 중요성을 강조합니다.

PHP에서 파일 확장을 얻는 방법은 무엇입니까? PHP에서 파일 확장을 얻는 방법은 무엇입니까? Sep 20, 2025 am 05:11 AM

useathinfo ($ filename, pathinfo_extension) togetThefileExtension; itreliablyHandleSmultipledOtsededGecases, returningTheextension (예 : "pdf") oranEmptyStringifnoneExists.

See all articles