对存入mysql数据库里的json数据进行操作的理解

我们都知道在一些大的商城项目或者需要用到大量数据的项目中,数据库中表结构非常复杂,表和表之间的映射更是繁琐用主外键确实可以处理这种复杂的联系,但是主外键在修改、删除数据时,有时会很麻烦。
这个时候就有人提出在数据库中直接存入json数据,这样做不但可以大大在保证表和表之间联系的密切,而且更可以省去数据库中大量字段的产生,减少数据库的负载和

有人提出理论,就有人用代码实现!!
那么有几点问题我们需要去思考一下
用json方式保存数据入库,有什么优点
1.想增加或减少字段时,不必频繁地去修改数据库,尤其 是使用三层框架,改一个字段要改好多内容的。(如果你在数据库中进行统计的话,最好还是遵循 3NF 原则, 直接存 json 基本上不符合 1NF 。如果你的这个数据只是在web 上用 js 来处理的话,还会是个不错的选择)
2.在查询相关信息时不必用联合查询,避免使用主外键,(主外键在修改、删除数据时,有时会很麻烦的)
使用方法
具体思路
所有的对json一切操作都在前端进行,返回给后端的是有数据库表字段的json数据,所以后端只负责对数据库表进行操作
相关函数json_encode和json_decode
//json_encode顾名思义json编码,就是将数组或对象,编码成json字符串的函数
$arr[‘a’] = 1;
a r r [ ′ b ′ ] = 2 ; v a r d u m p ( j s o n e n c o d e ( arr['b'] = 2; var_dump(json_encode( arr[b]=2;vardump(jsonencode(arr));
class obj { }$obj = new obj;
$obj->a = 1;
o b j − > b = 2 ; v a r d u m p ( j s o n e n c o d e ( obj->b = 2; var_dump(json_encode( obj>b=2;vardump(jsonencode(obj));
//这两条打印结果是一样的//string ‘{“a”:1,“b”:2}’ (length=13)
//而json_decode刚好相反,是将json字符串转成数组或对象//因为两组打印结果一样,所以我们任意取一组继续下面的实验 j s o n s t r = j s o n e n c o d e ( json_str = json_encode( jsonstr=jsonencode(obj);
//现在使用json_decode来对这组json格式的字符串进行操作//第一次不加第二参数var_dump(json_decode( j s o n s t r ) ) ; / / 打 印 结 果 为 对 象 / / o b j e c t ( s t d C l a s s ) [ 3 ] / / p u b l i c ′ a ′ = > i n t 1 / / p u b l i c ′ b ′ = > i n t 2 / / 第 一 次 加 第 二 参 数 v a r d u m p ( j s o n d e c o d e ( json_str)); //打印结果为对象//object(stdClass)[3]// public 'a' => int 1// public 'b' => int 2 //第一次加第二参数var_dump(json_decode( jsonstr));////object(stdClass)[3]//publica=>int1//publicb=>int2//vardump(jsondecode(json_str,true));//打印结果为数组//array (size=2)// ‘a’ => int 1// ‘b’ => int 2

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值