我正在尝试将JSON字符串保存到数据库中。
这是我得到的错误:
exception 'ErrorException' with message 'preg_replace(): Parameter mismatch, pattern is a string while replacement is an array
这就是我的JSON的样子:
"metadata": {
"is_ivr": 0,
"is_upgradable": 1,
"is_sms": 0,
"is_design": 0,
"threshold_amount": 0,
"post_threshold": 0,
"pre_threshold": 0
}
我想将元数据的值保存为字符串。
我试过这样做:
$data = $request->input('data');
$data['metadata'] = json_encode($data['metadata']);
dd($data);
array:8 [
"product_name" => "Pulse"
"parent_product" => 0
"product_description" => "goes here"
"metadata" => array:7 [
"is_ivr" => 0
"is_upgradable" => 1
"is_sms" => 0
"is_design" => 0
"threshold_amount" => 0
"post_threshold" => 0
"pre_threshold" => 0
]
"price_period" => 1
"price_variation" => 2
"outlet_pricing" => 0
"status" => 1
]
]
答案 0 :(得分:5)
说实话,我不知道目前正在发生什么,但打开你的模型(因为你还没有表现出来,我不知道它的名字)并填写:
protected $casts = [
'metadata' => 'array',
];
假设你还没有完成它。
现在,当您将数据插入数据库时,请不要使用任何json_encode
,只需使用:
$data = $request->input('data');
不
$data['metadata'] = json_encode($data['metadata']);
使用casts
属性Laravel会在插入数据库时自动将数组数据转换为json,并在从数据库获取数据时自动运行json_decode
以获取数组。
答案 1 :(得分:1)
在将JSON保存到数据库之前,您需要序列化数据,例如:
window.addEventListener('keyup', function (e) {
myGameArea.keys[e.keyCode] = false;
})
现在,如果您想从数据库重用PHP中的数据,则需要运行相反的反序列化。
$data = serialize( json_encode( $data['metadata'] ) );
// Insert $data into the DB
这将允许您保存数组等数据结构。 From the PHP documentation
生成值的可存储表示。
答案 2 :(得分:0)
使用Smith
Jim: First Born
Joe: Enjoys playing outside
Jon: Straight A student
Barnes
Mike: Just got his license
Dan: On vacation
Ken: Going to graduate school
Thompsons
James: Loves sports
Ben: Middle Child
Frank: Youngest child
并用逗号分隔,或者如果您希望通过直接调用其索引来访问数组的属性Implode();
发生的事情是你在数组上调用正则表达式而不是值。