这就是我的数据库:
我要插入的代码是这样的:
$attribute = [
'type'=>'customer',
'keys'=>[
'year'=>(string)$event->customer->year,
'month'=>(string)$event->customer->month,
'codeprogram'=>(string)$event->customer->codeprogram,
'codeoutput'=>(string)$event->customer->codeoutput,
'codeaccount'=>(string)$event->customer->codeaccount
],
'summary'=>$event->customer->value,
];
Summary::create($attribute);
我在表摘要中有4个字段:id,type,keys,summary
键的数据类型是json
执行时,插入字段键的数据如下:
{" codeprogram":" 1"," codeoutput":" 4"," codeaccount":& #34; 7","年": " 2017","月":" 1"}
有时像:
{" codeoutput":" 4"," year":" 2017"," codeprogram":& #34; 1","月":" 1", " codeaccount":" 7"}
插入的数据看起来是随机的
我希望按顺序将插入的数据按字段顺序输入字段:
{" year":" 2017"," month":" 1"," codeprogram":& #34; 1"," codeoutput":" 4", " codeaccount":" 7"}
我该怎么做?
答案 0 :(得分:2)
JSON对象中键的顺序没有意义。由于这个原因,许多实现不会以确定的顺序序列化对象。
对象是一组无序名称/值对。对象以
{
(左大括号)开头,以}
(右大括号)结束。每个名称后跟:
(冒号),名称/值对由,
(逗号)分隔。 [强调添加]
考虑以下伪代码,将JSON字符串反序列化为数据结构,然后将该数据结构序列化为JSON:
let a = '{ "x": "hello", "y": "world" }'
let b = to_json(from_json(a))
b
有两个可能的值:
'{ "x": "hello", "y": "world" }'
'{ "y": "world", "x": "hello" }'
两种结果都是有效的,两种结果都是等效的。
请注意,将JSON字符串存储在数据库列中通常被视为反模式,除非永远不会根据JSON的内容查询数据库。任何给定列的内容应该是原子值。如果数据库查询不是基于对象的属性/值对的内容,则仅适用于JSON对象。