在 Laravel api 中将字符串转换为 json

Posted

技术标签:

【中文标题】在 Laravel api 中将字符串转换为 json【英文标题】:Transform string to json in Laravel api 【发布时间】:2018-09-08 15:52:13 【问题描述】:

两个月前,我在 laravel 中创建了一个 api,并用 postman 对其进行了测试。一切正常。 现在我将继续开发,但我无法像以前那样访问元素。

邮递员:

主体:


   "RFQ" : "123",
   "client_id": "2",
   "ITEMS": [
      
         "material" : "1.234.565",
         "description" : "Test material 1",
         "quantity" : "2.123",
         "Quot. Deadline" : "2018-01-12",
         "delivery_date" : "2018-01-12",
      ,
      
         "material" : "9.87564.2",
         "description" : "Test material 2",
         "quantity" : "4",
         "Quot. Deadline" : "2018-01-12",
         "delivery_date" : "15.01.2018"
      
   ]

控制器:

public function import(ImportRequestForQuoteRequest $request, $id)

   return $request->getContent();

以前,我可以得到 $request->client_id 这样的 client_id 作为示例,但现在它什么也没返回。

如果我返回$request->getContent(),我会得到一个类似于正文的字符串。

我必须做什么才能访问这些值?

【问题讨论】:

dd($request->all()); 返回什么? 【参考方案1】:

尝试像这样返回它

public function import(ImportRequestForQuoteRequest $request, $id)

   return response()->json($request->getContent());

源文档: https://laravel.com/docs/5.6/responses#json-responses

【讨论】:

这个例子只是为了测试我是否可以访问这些值。我喜欢访问 client_id 的值以在控制器中使用它。 我的错,我想念@bmatovu 的问题,答案几乎说明了如何访问这些参数。如果这些不起作用,您可以随时通过 json_encode 运行它们【参考方案2】:

你可以在你的控制器中试试这个......

use Illuminate\Http\Request;

public function myFunction(Request $request, $id)

   $post_param = $request->post_param;

   $default = '';
   $post_param = $request->input('client_id', $default);

   $route_param = $id;

    return response()->json(['params' => $request->all()]);

【讨论】:

如果我返回return $request->client_id;,即使return $request->getContent() 显示完整内容也没有输出 试试dd($request->all())看看有什么参数被传递给函数 dd($request->all()) 不返回任何内容 dd(request->getContent()) 返回正文:""" \n "RFQ" : "123",\n "client_id": "2",\n "ITEMS": [\n \n "material" : "1.234.565",\n "description" : "Test material 1",\n "quantity" : "2.123",\n "Quot. Deadline" : "2018-01-12",\n "delivery_date" : "2018-01-12",\n \n ,\n \n "material" : "9.87564.2",\n "description" : "Test material 2",\n "quantity" : "4",\n "Quot. Deadline" : "2018-01-12",\n "delivery_date" : "15.01.2018"\n \n \n ]\n """ 【参考方案3】:

您需要将 json 解码为 php 数组,然后您就可以像 php 中的普通数组一样访问

$item = json_decode($request->ITEMS);

【讨论】:

它返回 null 所以你首先通过 dd() 函数检查数据是否来自请求 没有区别。它仍然返回 null 因为你的 json 字符串在这里是无效的检查主题,并且像:codebeautify.org/jsonviewer 我看到字符串中有 3 次 "。但我必须从他们来的地方搜索【参考方案4】:

你的身体:


   "RFQ" : "123",
   "client_id": "2",
   "ITEMS": [
      
         "material" : "1.234.565",
         "description" : "Test material 1",
         "quantity" : "2.123",
         "Quot. Deadline" : "2018-01-12",
         "delivery_date" : "2018-01-12",
      ,
      
         "material" : "9.87564.2",
         "description" : "Test material 2",
         "quantity" : "4",
         "Quot. Deadline" : "2018-01-12",
         "delivery_date" : "15.01.2018"
      
   ]

更改为:


   "RFQ" : "123",
   "client_id": "2",
   "ITEMS": [
      
         "material" : "1.234.565",
         "description" : "Test material 1",
         "quantity" : "2.123",
         "Quot. Deadline" : "2018-01-12",
         "delivery_date" : "2018-01-12"
      ,
      
         "material" : "9.87564.2",
         "description" : "Test material 2",
         "quantity" : "4",
         "Quot. Deadline" : "2018-01-12",
         "delivery_date" : "15.01.2018"
      
   ]

json 数组应该是格式正确的。所以尝试在第一项的“delivery_date”从数组中删除逗号。 您将使用 $request->all() 获得结果。

希望这能解决。

【讨论】:

JSON 实际上允许有尾随逗号。【参考方案5】:

我对 phpstorm REST Client 做了同样的请求。使用相同的正文和标题,一切正常。 Postman 在内容前后加了""" 不知道为什么。 所以错误在 Postman 的任何地方

【讨论】:

以上是关于在 Laravel api 中将字符串转换为 json的主要内容,如果未能解决你的问题,请参考以下文章

在 React.js 中将字符串转换为真实的 HTML

无法在laravel中将数组数组转换为没有索引的对象数组

如何使用 PHP 在 Laravel 7 中将 PascalCase 字符串转换为可用的 slug?

如何在php laravel中将数组键转换为随机字符串

在 PHP Laravel 中的 SQL Server 中将字符串转换为日期数据类型

如何在我的 recyclerview 适配器中将 API 日期转换为 Kotlin 中的字符串?