MySQL中的JSON字符串到json响应

时间:2017-04-11 13:00:38

标签: php json response lumen

我有一个存储在mysql数据库中的列(meta_data)中的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;

同样,使用response() - > json($ meta_data);将其作为字符串返回。

在我看来,它需要下一步,但我还没有能够接近我所追求的一切,这是理想的:

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

1 个答案:

答案 0 :(得分: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;

另一种选择是为表创建一个Model,然后将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;