使用Laravel和惯性访问json数据



我有一个简单的表单,有一个输入字段和一个提交按钮。

所做的就是获取用户输入,将其与外部API进行匹配,并将这两个记录提交给数据库。

来自外部API的响应是JSON格式,像这样,但我只想检索choices下的text字段

{
"id": "123",
"object": "tc",
"created": 1655642237,
"model": "text-code",
"choices": [
{
"text": "paragraph text here",
"index": 0,
"logprobs": null,
"finish_reason": "length"
}
]
}

这存储在一个变量$complete中,所以当我在视图中访问它时,我得到了所有这些,没有办法只针对特定的元素。

这是我的控制器

public function index()
{
$prompts = Writer::all();
return Inertia::render('Writer', [
'prompts' => $prompts
]);
}
public function store(Request $request)
{
$complete = $start->complete([
'engine' => '002',
'prompt' => $request->input('inputText')
]);
$data = json_decode($complete, true);
Validator::make($request->all(), [
'inputText' => 'required|min:5|max:255|string',
])->validate();
Writer::create([
'request' => $request->input('inputText'),
'response' => $data['choices']
]);
return redirect()->back()->with('message', 'success.');
}

我必须将$complete传递给create()方法,因为传递$data会产生错误

数组到字符串的转换

类stdClass的对象无法转换为字符串

但是,如果在变量后面加上return $data['choices'],则只得到choices

下的字段这个视图很简单

<div class="card w-100 bg-light mt-4 mb-4" v-for="prompt in $page.props.prompts">
<div class="card-body">
<h5 class="card-title">{{ prompt.request }}</h5>
<p class="card-text">{{ prompt.response }}</p>
</div>
</div>

为了访问$choices-数组中的数据(它是一个数组,而不是字符串,这就是为什么您得到了相应的错误),将store-方法中的相应行更改为

Writer::create([
'request' => $request->input('inputText'),
'response' => $data['choices'][0]['text']
]);

但是要注意$data[ 'choices' ]可能是空的,所以在存储任何值之前,确保检查是否存在并提供默认值,例如

$text = $data['choices'][0]['text'] ?? 'my-default-value';

最新更新