“不能使用带字符串偏移量的分配操作符”-Laravel

时间:2018-12-28 18:33:23

标签: php json laravel

我在Laravel中有一个应用程序,该应用程序从dB中获取大量数据并将其呈现为JSON。下面的代码行生成标题错误:

$decodedData['detail']['is_stem'] = isset($detailData->is_stem) ? $detailData->is_stem : 0;

错误是:不能使用带字符串偏移量的分配操作符

$ decodedData是一个较大的数组,最终以JSON返回。它是这样创建的:

$decodedData = json_decode($detailData->detail, true);

$ detailData是一个看起来像这样的对象:

App\CareersDetails Object
(
    [connection:protected] => mysql
    [table:protected] => 
    [primaryKey:protected] => id
    [keyType:protected] => int
    [incrementing] => 1
    [with:protected] => Array
        (
        )

    [withCount:protected] => Array
        (
        )

    [perPage:protected] => 15
    [exists] => 1
    [wasRecentlyCreated] => 
    [attributes:protected] => Array
        (
            [id] => 4
            [code] => 1234
            [title] => StackOverFlow
            [category] => My Category
            [detail] => "Some details in JSON"
            [is_stem] => 1
            [created_at] => 2018-12-28 17:05:15
            [updated_at] => 2018-12-28 17:05:15
        )

    [original:protected] => Array
        (
            [id] => 7
            [code] => 7890
            [title] => StackOverFlowRocks
            [category] => My Category
            [detail] => "Some details in JSON format"
            [is_stem] => 1
            [created_at] => 2018-12-28 17:05:15
            [updated_at] => 2018-12-28 17:05:15
        )

    [changes:protected] => Array
        (
        )

    [casts:protected] => Array
        (
        )

    [dates:protected] => Array
        (
        )

    [dateFormat:protected] => 
    [appends:protected] => Array
        (
        )

    [dispatchesEvents:protected] => Array
        (
        )

    [observables:protected] => Array
        (
        )

    [relations:protected] => Array
        (
        )

    [touches:protected] => Array
        (
        )

    [timestamps] => 1
    [hidden:protected] => Array
        (
        )

    [visible:protected] => Array
        (
        )

    [fillable:protected] => Array
        (
        )

    [guarded:protected] => Array
        (
            [0] => *
        )

)

当我使用以下命令进行调试时:

print_r($detailData->is_stem);

系统输出1。因此已设置。

或者,我的$ decodedData数组是否出错?

更新

感谢评论,我注意到我的$ decodedData不是数组,而是一个字符串。

因此我放弃了

`$detailData->detail`

使用print_r进入我的浏览器页面,并通过一个简单的单独的PHP脚本运行它:

$payload = "JSON FROM $detailData->detail";
$data = json_decode($payload,true);
$data['detail']['is_stem'] = 1;
print_r($data );

这有效。因此,我的问题是现在为什么从print_r转储字符串并且我的Laravel基于应用程序不起作用?

或者换句话说,为什么json_decode在Laravel App中返回一个字符串,但在PHP app中返回一个具有相同输入的数组?

1 个答案:

答案 0 :(得分:0)

我的问题是我的JSON数据是双重编码的。解决方法是:

$decodedData = json_decode(json_decode($detailData->detail), true);

请注意,这不是最佳做法,对我们来说是一个完全的监督,因此我们将尽快对此进行更改。