我正在尝试将json存储到数据库中并将其加载回来
我试着储存
{name: "John", age: 31, city: "New York"}
它存储正确。我检查了数据库,它显示正确。
{name:“约翰”,年龄:31,城市:“纽约”}
我一直在看风景
"{name: \"John\", age: 31, city: \"New York\"}"
这是我的密码。
public function store()
{
$paste = new Paste;
$paste->uuid = Str::uuid()->toString();
$paste->data = trim(Request::get('data',''));
$paste->save();
return Redirect::to('/paste/'.$paste->uuid)->with('success', 'Created');
}
public function show($uuid)
{
$paste = Paste::where('uuid',$uuid)->first();
return response()->json($paste->data);
}
有什么提示吗?
可在此处复制
https://www.bunlongheng.com/paste
试试# 2
如果是我干的
public function show($uuid)
{
$paste = Paste::where('uuid',$uuid)->first();
return View::make('layouts.fe.pastes.show', get_defined_vars());
}
在我看来,我只有这一句话
{!!$paste->data!!}
我得到的数据与我现在提交的数据相同。
{name: "John", age: 31, city: "New York"}
但是浏览器检测到它是文本,而不是响应JSON,这挫败了我试图做的事情的目的。
试试# 3
public function show($uuid)
{
$paste = Paste::where('uuid',$uuid)->first();
return response()->json(stripslashes($paste->data));
}
结果
"{name: \"John\", age: 31, city: \"New York\"}"
试试# 4
public function show($uuid)
{
$paste = Paste::where('uuid',$uuid)->first();
return View::make('layouts.fe.pastes.show', get_defined_vars());
}
观
{{ json_encode($paste->data, JSON_UNESCAPED_SLASHES) }}
结果
"{name: \"John\", age: 31, city: \"New York\"}"
尝试#5
我认为问题在于存储...而不是加载和渲染。
我试过了
return response()->json($paste);
我的JSON解析器检测到了它...
{
"id": 11,
"status": 0,
"uuid": "0c40f97d-7d98-42c6-864e-71d3ed81eed3",
"name": "n6ou",
"password": "",
"expiration": "",
"type": "json",
"data": "{name: \"John\", age: 31, city: \"New York\"}",
"created_at": "2021-04-22T22:53:11.000000Z",
"updated_at": "2021-04-22T22:53:11.000000Z"
}
这是我用来储存
$paste->data = trim(Request::get('data',''));
$paste->save();
试试#6
对于那些怀疑我的数据/内容的人
我试过在Pastebin中粘贴相同的行
它被清理过了,你可以看到下面。
https://pastebin.com/raw/r9akUK1v
5条答案
按热度按时间xzv2uavs1#
数据库
在数据库迁移中添加:
或
推荐使用JSON列类型,因为它允许对JSON数据执行SQL查询。请参见MySQL JSON Data Type
模型:转换属性
下一个问题是,您需要能够将数据转换为PHP数组。
这是通过修改模型中的casts属性来完成的:
如需详细信息,请参阅数组和JSON转型。
现在,您可以将数据作为PHP数组保存到属性中,还可以为其分配一个PHP数组。
在内部,当它保存数据时,它会自动将其转换为JSON字符串,并以正确的格式保存在数据库中。
存储方法
当以JSON形式接收输入时,这在很大程度上取决于您希望如何传递数据,
1.发送JSON内容类型的表单数据(推荐)
我的建议是在POST主体中以JSON形式发送整个数据,如下所示:
您的
store()
方法现在应该是(我还添加了验证代码):2.发送带有表单参数的表单数据
但是如果你坚持通过查询参数或表单参数发送数据,请注意这些参数只能发送字符串。因此,你需要发送JSON字符串的编码版本来保存数据类型,如下所示:
store方法现在看起来像这样:
显示方法
您的显示方法无需更改:
fdbelqdn2#
1-您的列必须是json类型
2-在模型中,您需要将列转换为数组
3-将数据值发送到控制器必须是一个数组,以便可以对其使用数组Laravel验证:
4-当你存储你的数据时,它将被自动解析,同样当你检索你的数据列时,它将被转换成一个数组
roejwanj3#
1.使用
->json()
作为迁移方法来存储JSON数据(https://laravel.com/docs/8.x/migrations#column-method-json)1.有关如何准备数据的信息,请参阅“数组和JSON转换”(https://laravel.com/docs/8.x/elongent-mutators#array-and-json-casting
我知道答案不像其他人那样用段落来表达,但我喜欢把它简单明了。这是最好的解决方案吗?没有人能告诉你也不能证明这一点?这种方法可行吗?没有人能告诉你也不能证明这一点,但至少它提高了你的成功率。如果还有什么我能帮忙的,请告诉我!祝你好运
f2uvfpb94#
如果你想把数据作为json存储在DB上并恢复它,只需执行以下操作(我总是使用这种方法):
1-将数据添加到数组:
2-对数组进行编码并将其添加到数据库中(可以将其存储为文本)
3-如果你想添加嵌套的json数据,只要把你的数组做成嵌套数组就行了。
4-恢复数据时,只需使用json_decode对其进行解码
6ie5vjzr5#
只需将此添加到您的模型中。
然后你就可以得到这样的观点: