在Laravel中如何解码JSON对象

6

我希望能够在Laravel 5.1中解码相册数组JSON对象。我的JSON如下:

{
  "title": "aaaaaaaaaaaaaaaa",
  "category_id": "1",
  "user_id": "1",
  "gallery": "[{name: \"XCB808tvXNpqXKqekA2HlkJ8H.jpg\",size:5112},{name: \"s6kA6B0e5m1sdSAjPXqNwtiy4.jpg\", size: 13135}]"
}

当我使用这段代码时,返回值是null
public function store(Request $request)
    {
         $json = json_decode($request['gallery'],true);
         return $json;
    }
}

这是 dd($request['gallery']) 的结果

[{'name': "XCB808tvXNpqXKqekA2HlkJ8H.jpg",'size':5112},{'name': "s6kA6B0e5m1sdSAjPXqNwtiy4.jpg", 'size': 13135}]

“gallery”不是一个JSON对象,而是一组JSON对象的列表,因此首先需要将它们分开 - 您可以使用“explode()”来完成。 - mitkosoft
我应该怎么做explode? - Ehsan Ali
dd($request['gallery']) 的结果是什么? - Moppo
@mitkosoft:它仍然是Json格式,不需要使用explode函数。 - Pierre Emmanuel Lallemant
@PierreEmmanuelLallemant,[{'name': "XCB808tvXNpqXKqekA2HlkJ8H.jpg",'size':5112},{'name': "s6kA6B0e5m1sdSAjPXqNwtiy4.jpg", 'size': 13135}] 不是一个有效的JSON对象。请前往http://jsonlint.com/进行验证。 - mitkosoft
显示剩余3条评论
4个回答

6
解码过程正确。我认为你的问题可能是JSON字符串格式不正确。
请将属性名称周围的单引号替换为双引号:
[{"name": "XCB808tvXNpqXKqekA2HlkJ8H.jpg","size":5112},{"name": "s6kA6B0e5m1sdSAjPXqNwtiy4.jpg", "size": 13135}]

1

我不太确定你的程序流程,但由于你将Request依赖项注入到store函数中,我假设JSON对象是请求的一部分。在这种情况下,你可以尝试以下方法:

$input   = $request->json()->all();

只需使用print_r($input)并查看您获取的内容。

如果JSON对象不是您的请求的一部分,则可能错过将$json传递给您的函数。虽然这只是一个猜测!


1

我来了解一下有关尝试获取json格式响应的问题(Laravel 8.8.0)。我成功的方法是使用:

$jsonFormattedResult = json_decode ($response->content(), true);

希望它能帮助到某些人。('-')/

0

你可以使用 Response::json($value);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接