1 Star 1 Fork 0

不得闲 / dxsvalue

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

DxValue

万能值变量,其目的是将各种编码类型(目前已经支持了JSON,MsgPack,Yaml,BSON)都可以使用本库来进行操作处理, 本来以前写了个DxValue,之后参考了一些其他的相关解码编码库,感觉不是很理想,所以本版本是重构之后的优化版本, 之前将不同的类型值通过指针进行区分,对于某些使用操作不太统一方便,所以本次重写,全部使用一个结构代替,同时 内部支持cache缓存创建,也便于回收,支持说明:

  • JSON完全支持
  • MsgPack完全支持
  • Yaml简要支持,目前支持嵌入,引用归并等,暂时不支持行内类Json格式解析
  • BSON基本上完全支持,对于一些特有编码类型的如minkey等未做支持

用法

go get github.com/suiyunonghen/dxsvalue

1、NewValue

    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中的对象结构,用法:

    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类型主 要针对数组类的数据设定

MIT License Copyright (c) 2017 suiyunonghen Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

支持Json,MsgPack,Bson,yaml编解码的通用类型库 展开 收起
Go
MIT
取消

贡献者

全部

近期动态

加载更多
不能加载更多了
Go
1
https://gitee.com/dxsoft/dxsvalue.git
git@gitee.com:dxsoft/dxsvalue.git
dxsoft
dxsvalue
dxsvalue
master

搜索帮助