Json类型 JSON操作

注意

 如果是多表查询用到ViewModel 那么也需要 IsJson特性 

用法

就算你的数据库不支持Json类型,sqlsugar也可以让你支持JSON

public class UnitJsonTest
{
   [SqlSugar.SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
   public int Id { get; set; }
   [SqlSugar.SugarColumn( IsJson = true)]//必填
   public Order Order { get; set; }//可以是数组或者JArray JObject
   public string Name{get;set;}
}
Db.Insertable(new UnitJsonTest() 
{ Name="json1",Order = new Order { Id = 1, Name = "order1" } }).ExecuteCommand();
var list = Db.Queryable<UnitJsonTest>().ToList();

动态Json

我们可以实体用JObject和JArray实现动态类型,当然其他字典什么的只要能序列化的都支持

[SqlSugar.SugarColumn(IsJson = true)] 
public JObject Order { get; set; } 

JObject o=  JObject.FromObject(new { id = 1 });
JArray o2 = JArray.FromObject(new List<object> { new { id=1} });

//只要能序列化的都支持,并不是只支持这2种

新功能:

5.1.4.68 版本支持了System.Text.Json里面的对象

JSON函数 5.1.2.8+

支持JObject JArray ,实体 ,集合等类型

[SugarColumn(IsJson=true)]//添加特性
public List<Order> JsonObj{get;set;}

函数名说明兼容


SqlFunc.JsonLike

模糊查询,兼容所有库,性能一般适合小数据处理

SqlFunc.JsonLike(it.JsonObj,"a") 

等于Like '%a%'

支持所有数据库





SqlFunc.JsonField

 注意:大小写要一样

(1)查询Id的值{id:1}

SqlFunc.JsonField(it.JsonObj,"id")
//返回1

(2)多层级查询,查询id 的值 {obj:{id:"a"}} 

SqlFunc.JsonField(it.JsonObj,"obj","id")
//返回a

如果不支持请升级

支持 PostgreSQL

支持 SqlServer2017+

支持 MySql (只能字段)

支持 Oracle (只能字段)

Sqlite升级到:5.1.4.148

支持 Sqlite 


SqlFunc.JsonIndex

需要升级到:5.1.4.113+


获取json数组的索引对象

SqlFunc.JsonIndex(it.JsonArray,0)

如果是['a','c'] 那么返回a


PostgreSQL

MySql 

SqlServer2017


SqlFunc.JsonParse转成JSON类型支持PostgreSQL


SqlFunc.JsonContainsFieldName

第一层是否存在id (如果多层级需要结合JsonField)

SqlFunc.JsonField("{id:1}","id")//true
支持PostgreSQL

SqlFunc.JsonArrayAny(it.Json, "a")

需要升级到:5.1.3.36+

["a","b","c"] 这种数组里面是否存在字符串 a  

注意:如果是数字可以 1或者"1" 都试一下

也就是 [1,2]  参数用int类型

也就是 ["1","2"] 参数用string类型

注意:如果是多个值可以结合【动态表达式】

https://www.donet5.com/Ask/9/26342

支持PostgreSQL

支持MySql

支持SqlServer(最新版本)

SqlFunc.JsonListObjectAny(it.json, "Name", "a")

需要升级到:5.1.3.36+

[{"name":"a"},{"name":"b"}] 集合中是否存在 name=a的一项

注意:如果是数字可以 1或者"1" 2种类型参数都试一下

注意:如果是多个值可以结合【动态表达式】

https://www.donet5.com/Ask/9/26342

支持PostgreSQL

支持MySql

支持SqlServer(最新版本)

SqlFunc.JsonArrayLength(it.Json)[1,2,3] 获取数组长度

支持PostgreSQ

SqlSugar 5.1.4.115

支持MySql

支持 SqlServer

使用场景

例如保存用户的一些附带信息,这个时候不需要额外建表



关闭
果糖网