Php 防止json编码以字符串形式返回数组

Php 防止json编码以字符串形式返回数组,php,json,laravel-5,Php,Json,Laravel 5,查询数据库时,我得到以下json响应: [{"id":1,"name":"my name","street":"Sava Burica","city":"Belgrade","state":"Zemun","zip":"11080","country":"Serbia","giftwrap":null,"products":"[{\"count\":2,\"id\":1,\"price\":275,\"name\":\"Kayak\"},{\"count\":1,\"id\":2,\"price

查询数据库时,我得到以下json响应:

[{"id":1,"name":"my name","street":"Sava Burica","city":"Belgrade","state":"Zemun","zip":"11080","country":"Serbia","giftwrap":null,"products":"[{\"count\":2,\"id\":1,\"price\":275,\"name\":\"Kayak\"},{\"count\":1,\"id\":2,\"price\":48.95,\"name\":\"Lifejacket\"}]"}]

除了
products
值是一个字符串并且应该是一个数组之外,这一切都很好

我使用Laravel5.3作为我的框架,但我不认为这有什么区别


我可以强制它以数组而不是字符串的形式返回数组吗?

在主字符串中,您的产品也是JSON字符串编码的数据,因此您需要做的就是解码它

$s = '[{"id":1,"name":"my name","street":"Sava Burica","city":"Belgrade","state":"Zemun","zip":"11080","country":"Serbia","giftwrap":null,"products":"[{\"count\":2,\"id\":1,\"price\":275,\"name\":\"Kayak\"},{\"count\":1,\"id\":2,\"price\":48.95,\"name\":\"Lifejacket\"}]"}]';
$address = json_decode($s,true);

$s = $address[0]['products'];
$address[0]['products'] = json_decode($s,true);
print_r($address);
这是回报

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => my name
            [street] => Sava Burica
            [city] => Belgrade
            [state] => Zemun
            [zip] => 11080
            [country] => Serbia
            [giftwrap] => 
            [products] => Array
                (
                    [0] => Array
                        (
                            [count] => 2
                            [id] => 1
                            [price] => 275
                            [name] => Kayak
                        )

                    [1] => Array
                        (
                            [count] => 1
                            [id] => 2
                            [price] => 48.95
                            [name] => Lifejacket
                        )

                )

        )

)

在主字符串中,您的产品也是JSON字符串编码的数据,因此您需要做的就是对其进行解码

$s = '[{"id":1,"name":"my name","street":"Sava Burica","city":"Belgrade","state":"Zemun","zip":"11080","country":"Serbia","giftwrap":null,"products":"[{\"count\":2,\"id\":1,\"price\":275,\"name\":\"Kayak\"},{\"count\":1,\"id\":2,\"price\":48.95,\"name\":\"Lifejacket\"}]"}]';
$address = json_decode($s,true);

$s = $address[0]['products'];
$address[0]['products'] = json_decode($s,true);
print_r($address);
这是回报

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => my name
            [street] => Sava Burica
            [city] => Belgrade
            [state] => Zemun
            [zip] => 11080
            [country] => Serbia
            [giftwrap] => 
            [products] => Array
                (
                    [0] => Array
                        (
                            [count] => 2
                            [id] => 1
                            [price] => 275
                            [name] => Kayak
                        )

                    [1] => Array
                        (
                            [count] => 1
                            [id] => 2
                            [price] => 48.95
                            [name] => Lifejacket
                        )

                )

        )

)

products
值看起来是双重JSON编码的。可以包含生成此JSON的代码吗?这是一个laravel查询,DB::table('orders')->get();db中的列是这样的:[{“count”:2,“id”:1,“price”:275,“name”:“Kayak”},{“count”:1,“id”:2,“price”:48.95,“name”:“lifehaker”}]它以JSON格式保存在db中?那么,您的“产品”已经是一个字符串了。你应该解码它,把它插入你的对象,然后对整个东西进行编码。您看到的是@Don'tPanic所说的,一个双json编码的对象。PD:您不应该将json结构保存在关系数据库中。仅仅因为angular发送json并不意味着您必须直接存储json。我建议将其解码并使用它填充产品实体。
products
值看起来是双重JSON编码的。可以包含生成此JSON的代码吗?这是一个laravel查询,DB::table('orders')->get();db中的列是这样的:[{“count”:2,“id”:1,“price”:275,“name”:“Kayak”},{“count”:1,“id”:2,“price”:48.95,“name”:“lifehaker”}]它以JSON格式保存在db中?那么,您的“产品”已经是一个字符串了。你应该解码它,把它插入你的对象,然后对整个东西进行编码。您看到的是@Don'tPanic所说的,一个双json编码的对象。PD:您不应该将json结构保存在关系数据库中。仅仅因为angular发送json并不意味着您必须直接存储json。我建议将其解码并使用它填充产品实体。