【发布时间】:2021-02-27 19:10:45
【问题描述】:
我正在制作 Laravel API,但我似乎无法在其中一篇文章中发送 JSON 数据。我检查了StackOverflow中的其他帖子,但似乎我的JSON请求是正确的,所以我似乎找不到错误:
这是我的控制器方法中的代码:
$validator = Validator::make($request->all(), [
"name" => "required|string",
"colors" => "json",
"sizes" => "json"
]);
if($validator->fails())
return response()->json(["errors" => $validator->errors()], 400);
这是请求正文:
{
"name": "Test",
"colors": {
"Man": "#0000ff",
"Second": "#FF0000"
},
"sizes": {
"titles": "20px"
}
}
错误:
{
"errors": {
"colors": ["The colors must be a valid JSON string."],
"text_sizes": ["The text sizes must be a valid JSON string."]
}
}
似乎是什么问题?谢谢!
【问题讨论】:
-
你传递的是一个 json 对象,而不是一个 json 字符串。所以为了这个工作我认为你需要做
JSON.parse()。这样你就会得到类似"\"colors\": {\n \"Man\": \"#0000ff\",\n \"Second\": \"#FF0000\"\n }" -
我试过这样做:"colors": "{'Main': '#0000ff','Secondary': '#FF0000'}" 但没有成功。这不是一个有效的 json 字符串吗?
-
不,我认为您需要使用反斜杠:"\"colors\": \"Man\": \"#0000ff\",\"Second\": \"#FF0000\" } ”。 PS我的意思是
JSON.stringify()当然。 -
我明白了。那么,如何在验证 JSON 字段之前对其进行字符串化?因为我只希望在我的情况下,两个属性是 JSON 数据。
-
@Tom 请在帖子中回复,以便我可以将我的帖子标记为已回答。谢谢。
标签: php json laravel validation