JSON MySQL 到 json 响应中的字符串

JSON string in MySQL to json response

我有一个 JSON 格式的字符串存储在 mysql 数据库的列 (meta_data) 中,存储在 table 中,例如它看起来像这样:

 {"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); returns 它作为一个字符串。

在我看来,它需要进行下一步,但我无法获得任何接近我所追求的东西,理想情况下是:

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

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

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

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

return $records;

另一种选择是为 table 创建模型,然后将 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;