# dxsvalue **Repository Path**: dxsoft/dxsvalue ## Basic Information - **Project Name**: dxsvalue - **Description**: 支持Json,MsgPack,Bson,yaml编解码的通用类型库 - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-03-31 - **Last Updated**: 2024-05-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DxValue 万能值变量,其目的是将各种编码类型(目前已经支持了JSON,MsgPack,Yaml,BSON)都可以使用本库来进行操作处理, 本来以前写了个DxValue,之后参考了一些其他的相关解码编码库,感觉不是很理想,所以本版本是重构之后的优化版本, 之前将不同的类型值通过指针进行区分,对于某些使用操作不太统一方便,所以本次重写,全部使用一个结构代替,同时 内部支持cache缓存创建,也便于回收,支持说明: - JSON完全支持 - MsgPack完全支持 - Yaml简要支持,目前支持嵌入,引用归并等,暂时不支持行内类Json格式解析 - BSON基本上完全支持,对于一些特有编码类型的如minkey等未做支持 ## 用法 > go get github.com/suiyunonghen/dxsvalue 1、NewValue ```go v := dxsvalue.NewValue(VT_Object) v.SetKeyString("Name","不得闲") v.SetKeyInt("Age",36) v.SetKeyFloat("Weight",23.5) //添加一个数组 arrv := v.SetKey("Children",VT_Array) //数组中增加一个对象 child := arrv.SetIndex(0,VT_Object) child.SetKeyString("Name","Child1") child.SetKeyString("Sex","boy") child.SetKeyInt("Age",3) //数组中增加一个对象 child = arrv.SetIndex(1,VT_Object) child.SetKeyString("Name","Child2") child.SetKeyString("Sex","girl") child.SetKeyInt("Age",3) fmt.Println(string(Value2Json(v,nil))) ``` 以上的代码最终的输出结果为 ``` { "Name": "不得闲", "Age": 36, "Weight": 23.5, "Children": [ { "Name": "Child1", "Sex": "boy", "Age": 3 }, { "Name": "Child2", "Sex": "girl", "Age": 3 } ] } ``` 2、NewValueFromJson >使用本函数主要是从JSON中构建一个DxValue对象进行操作,有两个参数,参数2指定是否使用cache,如果使用 >了cache,之后可以使用FreeValue对Value进行回收,此时使用的Value都是cache中的对象结构,用法: ```go str := `{"Result":0,"Name":"不得闲","Age":36,"Weight":167.3,"arr":[ {"gg":23},23 ]}` v,err := dxsvalue.NewValueFromJson([]byte(str),true) if err != nil{ fmt.Println("发生错误:",err) } defer dxsvalue.FreeValue(v) ``` 除以上之外,还有NewValueFromBson,NewValueFromMsgPack,NewValueFromYaml,使用方法差不多 3、获取值 > DxValue可以使用String,Int,Bool,Float,DateTime,GoTime等来获取简单类型Value的相对 >应的数据值,相应的使用SetXXX函数来设置相应的数据值,AsString,AsInt等可以用来获取相应的 >key对应的值 > > >获取某个节点的值,可以使用ValueByName()来查找到某个节点,然后相应的使用AsXXX等函数来获取,同时也可以 >使用ValueByPath获取一个路径下面的节点,比如要获取 a/b/c ValueByPath('a','b','c'),相应的也有 >StringByPath,BoolByPath等 > > 4、设定值 > 使用SetXX类的函数,SetKeyXXX类型的主要用来设定K-V结构的数据设定主要针对Object类型,SetIndex类型主 >要针对数组类的数据设定