2017-04-11 84 views
1

我存储在一个MySQL数据库中的列(meta_data)一个JSON格式的字符串,存储在表中,它看起来像这样的例子:JSON字符串在MySQL中JSON响应

{"Format":"JPEG","Geometry":"3216x2136","size":{"width":3216,"height":2136}} 

现在,如果我使用以下命令:

$meta_data = DB::query->get(); 
return $meta_data; 

我得到:

[ 
    { 
    "meta_data": "{\"Format\":\"JPEG\",\"Geometry\":\"3216x2136\",\"size\":{\"width\":3216,\"height\":2136} 
    } 
] 

我也得到了同样的结果,如果我使用:

$meta_data = json_decode(DB::query->get()); 
return $meta_data; 

类似地,使用响应() - > JSON($ meta_data);以字符串形式返回它。

在我看来,它需要去下一个步骤下来,但我一直没能得到任何接近我后,其理想:

[ 
    { 
    "meta_data": 
    { 
     "Format":"JPEG", 
     "Geometry":"3216x2136", 
     "size": 
     { 
     "width":3216, 
     "height":2136 
    } 
    } 
    } 
] 
+0

你想改变josn到阵列?或者请你清楚的问题是什么? –

回答

1

DB::query->get()将返回stdClass对象数组(假设query只是查询条件的简写)。您将需要遍历数组并将每个条目的meta_data字段手动转换为json对象。

$records = DB::query->get(); 

foreach ($records as $record) { 
    $record->meta_data = json_decode($record->meta_data); 
} 

return $records; 

另一种选择是创建表格模型,然后将meta_data字段添加到$casts属性将自动转换为JSON。

型号:

class Attachment extends Model 
{ 
    protected $casts = [ 
     'meta_data' => 'json', 
    ]; 
} 

控制器:

// assume "query" is shorthand for your query conditions 
$records = Attachment::query->get(); 

return $records;