如何设置使用json数据类型插入到字段的键的顺序?

时间:2017-05-14 07:15:40

标签: php mysql json laravel laravel-5.3

这就是我的数据库:

This is my database

我要插入的代码是这样的:

$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"}

我该怎么做?

1 个答案:

答案 0 :(得分:2)

JSON对象中键的顺序没有意义。由于这个原因,许多实现不会以确定的顺序序列化对象。

  

对象是一组无序名称/值对。对象以{(左大括号)开头,以}(右大括号)结束。每个名称后跟:(冒号),名称/值对由,(逗号)分隔。 [强调添加]

     

- http://json.org

考虑以下伪代码,将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对象。