>백엔드 개발 >PHP 문제 >PHP 배열을 json으로 변환하고 큰따옴표를 제거하는 방법

PHP 배열을 json으로 변환하고 큰따옴표를 제거하는 방법

PHPz
PHPz원래의
2023-04-27 09:06:341351검색

PHP에서는 json_encode 함수를 통해 배열을 JSON 형식으로 변환할 수 있습니다. 이 함수는 $value 매개변수를 받아 JSON 형식 문자열로 변환합니다. 그러나 기본적으로 json_encode 함수는 JSON 문자열을 생성할 때 개체의 속성 이름을 큰따옴표로 묶어 일부 프런트 엔드 프레임워크의 사용에 영향을 미칩니다. 그렇다면 json_encode 함수가 생성된 JSON 문자열에서 큰따옴표를 제거하도록 만드는 방법은 무엇일까요? json_encode 函数实现,这个函数接受一个参数 $value,将其转换为 JSON 格式的字符串。但是,在默认情况下,json_encode 函数在生成 JSON 字符串时会将对象的属性名用双引号包裹起来,这会影响一些前端框架的使用。那么,如何让 json_encode 函数去掉生成的 JSON 字符串中的双引号呢?

首先,我们来看一下 json_encode 函数默认生成的 JSON 字符串格式:

$arr = array('name' => '张三', 'age' => 18, 'gender' => 'male');
$jsonStr = json_encode($arr);
echo $jsonStr;

上述代码的输出结果为:

{"name":"张三","age":18,"gender":"male"}

可以看到,JSON 字符串中的属性名都用双引号包裹起来了。

如果我们想去掉双引号,可以使用 PHP 的反射机制。如果读者不熟悉反射,可以在阅读本篇文章后再进行学习。

下面是一个实现将 JSON 字符串中的属性名去掉双引号的例子:

class JsonWithoutQuotes {
    public function __construct($data) {
        $this->originalData = $data;
    }
  
    public function getJson() {
        $data = $this->originalData;
        $jsonData = json_encode($data);
        $jsonData = preg_replace_callback(
            '/"(.*?)":/is', 
            function($matches) { 
                $match = $matches[1];
                return is_string($match) ? $match.":" : $match; 
            },
            $jsonData);
            
        return $jsonData;
    }
}

上面的代码中,我们使用了一个自定义的类 JsonWithoutQuotes,它接收一个数组作为参数并将其保存在 $originalData 属性中。getJson 方法用于将 $originalData 中的数组转换成不包含双引号的 JSON 字符串:

首先,我们调用 json_encode 函数将原始数据转换为 JSON 字符串,然后使用 PHP 内置的正则表达式引擎 preg_replace_callback 方法将 JSON 字符串中的属性名用回调函数中返回的字符串替代。回调函数的作用是判断一个匹配到的字符串是否为字符串类型,如果是,就返回不包含双引号的字符串,如果不是,则原样返回该字符串。

$arr = array('name' => '张三', 'age' => 18, 'gender' => 'male');
$jsonStr = (new JsonWithoutQuotes($arr))->getJson();
echo $jsonStr;

实际运行效果:

{name:"张三",age:18,gender:"male"}

可以看到,现在 JSON 字符串中的属性名已经去除了双引号。

总结:

使用 PHP 自带的 json_encode

먼저 json_encode 함수에 의해 기본적으로 생성되는 JSON 문자열 형식을 살펴보겠습니다. 🎜rrreee🎜위 코드의 출력 결과는 다음과 같습니다. 🎜rrreee🎜보시다시피 속성은 JSON 문자열의 이름은 모두 큰따옴표로 묶입니다. 🎜🎜큰따옴표를 제거하려면 PHP의 반사 메커니즘을 사용할 수 있습니다. 독자가 성찰에 익숙하지 않은 경우 이 기사를 읽은 후 성찰에 대해 배울 수 있습니다. 🎜🎜다음은 JSON 문자열의 속성 이름에서 큰따옴표를 제거하는 예입니다. 🎜rrreee🎜위 코드에서는 배열을 매개변수로 받아 저장하는 사용자 정의 클래스 JsonWithoutQuotes를 사용합니다. $originalData 속성에 있습니다. getJson 메서드는 $originalData의 배열을 큰따옴표 없이 JSON 문자열로 변환하는 데 사용됩니다. 🎜🎜먼저, json_encode 함수를 호출합니다. 원본 데이터를 JSON 문자열로 변환한 다음 PHP에 내장된 정규식 엔진 preg_replace_callback 메서드를 사용하여 JSON 문자열의 속성 이름을 콜백 함수에서 반환된 문자열로 바꿉니다. 콜백 함수의 기능은 일치하는 문자열이 문자열 유형인지 확인하는 것입니다. 그렇다면 큰따옴표 없이 문자열을 반환합니다. 그렇지 않으면 문자열을 그대로 반환합니다. 🎜rrreee🎜실제 실행 효과: 🎜rrreee🎜JSON 문자열의 속성 이름에서 큰따옴표가 제거된 것을 확인할 수 있습니다. 🎜🎜요약: 🎜🎜PHP와 함께 제공되는 json_encode 함수를 사용하여 배열을 JSON 문자열로 변환하는 것은 매우 편리합니다. 그러나 경우에 따라 JSON 문자열의 속성 이름에서 큰따옴표를 제거해야 합니다. 현재 이 목표를 달성하기 위해 PHP 리플렉션 메커니즘을 사용할 수 있습니다. 🎜

위 내용은 PHP 배열을 json으로 변환하고 큰따옴표를 제거하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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