PHP에서 JSON 데이터를 처리 할 때 때때로 필드 이름을 교체해야합니다. 일반적으로 사용되는 방법은 JSON을 배열로 디코딩 한 다음 처리하는 다음 일부 시나리오에서는 JSON 문자열의 필드 이름을 일반 표현식으로 직접 대체하는 것이 더 빠릅니다. 이 기사에서는 PHP의 MB_EREGI_REPLACE 기능을 사용하여 JSON 데이터의 필드 이름을 대체하는 방법을 자세히 설명하고 샘플 코드로 설명합니다.
MB_EREGI_REPLACE 는 PHP Multi-Byte String Function Library (MBString)에서 정기적 인 교체 함수입니다. 문자열의 사례에 민감한 정기적 인 교체를 지원하고 다중 바이트 문자 인코딩을 지원하는데, 이는 중국어와 같은 다중 바이트 문자를 포함하는 문자열을 처리하는 데 적합합니다.
기능 프로토 타입 :
string mb_eregi_replace ( string $pattern , string $replacement , string $string [, string $option = "msr" ] )
$ 패턴 : 일치하는 정규 표현 패턴 (Case Insensitive)
$ 교체 : 교체 문자열
$ 문자열 : 입력 된 문자열
$ 옵션 : 옵션 매개 변수, 일반적으로 기본값을 사용하여 일치 동작을 지정합니다.
JSON 문자열 필드 이름은 일반적으로 이중 인용문으로 래핑되며 직접 문자열을 대체 할 때 실수를 쉽게 할 수 있습니다.
MB_EREGI_REPLAPE는 다중 바이트를 지원하며 다양한 인코딩 형식으로 JSON과 호환됩니다.
교체가 누락 된 경우 사례 차이를 피하기 위해 사례 insensitive 교체를 지원합니다.
간단한 필드 이름 교체 시나리오에 적합하므로 먼저 JSON을 구문 분석 할 필요가 없습니다.
다음 JSON 문자열이 있다고 가정합니다.
{
"UserName": "장 산",
"UserAge": 28,
"UserEmail": "zhangsan@example.com"
}
모든 필드 이름의 "사용자"를 "멤버"로 바꾸고 싶습니다. 작동 단계 :
예를 들어 "사용자 이름" 의 사용자 이름 과 일치하려면 정규 일치 필드 이름 부분을 사용하십시오.
일치하는 필드 이름을 대체하려면 mb_eregi_replace를 사용하십시오.
새 JSON 문자열을 출력하십시오.
<?php
// 원래의 JSON 끈
$json = '{"UserName":"장 산","UserAge":28,"UserEmail":"zhangsan@m66.net"}';
// 교체 규칙을 정의하십시오,필드 이름을 접두사합니다 "User" 대체하십시오 "Member"
// 정규 표현식은 이중 인용문과 일치합니다 User 처음에 필드 이름,필드의 후반을 포착하십시오
$pattern = '"User([a-zA-Z0-9_]*)"';
// 替换끈,할 것이다 User 대체하십시오 Member,접미사를 변경하지 않도록하십시오
$replacement = '"Member\\1"';
// 사용 mb_eregi_replace 교체하십시오
$newJson = mb_eregi_replace($pattern, $replacement, $json);
// 출력이 교체됩니다 JSON 끈
echo $newJson;
?>
{"MemberName":"장 산","MemberAge":28,"MemberEmail":"zhangsan@m66.net"}
정규 표현식 ' "사용자 ([A-Za-Z0-9 _]*)는 "사용자 "로 시작하는 모든 필드 이름과 이중 인용문으로 일치합니다.
캡처 그룹 ([a-za-z0-9 _]*) 를 사용하여 필드 이름의 나머지 부분을 얻으십시오.
"member \\ 1"을 사용하여 "사용자"를 "멤버"로 바꾸고 필드 이름 접미사를 유지하십시오.
그렇게하면 필드의 해당 값에 영향을 미치지 않습니다.
JSON에 나타나는 URL 도메인 이름은 요구 사항을 충족시키기 위해 M66.NET 으로 대체되었습니다.
이 방법은 간단한 필드 이름 구조와 표준화 된 형식의 JSON에만 적합합니다.
JSON 문자열에 복잡한 중첩 구조가 포함 된 경우 먼저 JSON_DECODE 로 디코딩하는 것이 좋습니다. 그런 다음 필드 이름을 배열 작업으로 바꾸고 마지막으로 json_encode 와 함께 새 JSON을 생성하는 것이 좋습니다.
MB_EREGI_REPLACE는 어설 션과 같은 복잡한 일반 구문을 지원하지 않습니다. 교체 요구 사항이 복잡한 경우 PCRE 기능 또는 JSON 해상도 체계를 선택하십시오.