• Github每日精选(第73期):Go 的 JSON 解析器gjson


    gjson

    GJSON 是一个Go包,它提供了一种从json文档中获取值的快速简单的方法。它具有单行检索、点符号路径、迭代和解析 json 行等功能。

    还可以查看SJSON以修改 json,以及JJ命令行工具。

    本自述文件是如何使用 GJSON 的快速概述,有关更多信息,请查看GJSON 语法。

    在这里插入图片描述

    github 的地址在这里

    安装

    安装gjson,使用的是go传统的安装方法:

    go install github.com/tidwall/gjson@latest
    
    • 1

    在文件的目录下执行:

    $ go get -u github.com/tidwall/gjson
    
    • 1

    这样就在目录下,可以使用gjson了。

    使用

    获取相应的数值。

    获取指定路径的搜索 json。路径采用点语法,例如“name.last”或“age”。当找到该值时,它会立即返回。

    package main
    
    import "github.com/tidwall/gjson"
    
    const json = `{"name":{"first":"Janet","last":"Prichard"},"age":47}`
    
    func main() {
    	value := gjson.Get(json, "name.last")
    	println(value.String())
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    这将打印:

    Prichard
    
    • 1

    这个跟我们使用的传统的json解析还有一点区别,gjson不仅帮我们解析了json的数据,还帮我们建立了快速查找的通道。

    路径语法

    路径是由点分隔的一系列键。密钥可能包含特殊的通配符“*”和“?”。要访问数组值,请使用索引作为键。要获取数组中的元素数量或访问子路径,请使用“#”字符。点和通配符可以用“\”转义

    {
      "name": {"first": "Tom", "last": "Anderson"},
      "age":37,
      "children": ["Sara","Alex","Jack"],
      "fav.movie": "Deer Hunter",
      "friends": [
        {"first": "Dale", "last": "Murphy", "age": 44, "nets": ["ig", "fb", "tw"]},
        {"first": "Roger", "last": "Craig", "age": 68, "nets": ["fb", "tw"]},
        {"first": "Jane", "last": "Murphy", "age": 47, "nets": ["ig", "tw"]}
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    "name.last"          >> "Anderson"
    "age"                >> 37
    "children"           >> ["Sara","Alex","Jack"]
    "children.#"         >> 3
    "children.1"         >> "Alex"
    "child*.2"           >> "Jack"
    "c?ildren.0"         >> "Sara"
    "fav\.movie"         >> "Deer Hunter"
    "friends.#.first"    >> ["Dale","Roger","Jane"]
    "friends.1.last"     >> "Craig"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    您还可以使用 查询数组中的第一个匹配项#(…),或使用 查找所有匹配项#(…)#。查询支持==, !=, <, <=, >,>= 比较运算符和简单的模式匹配%(like) 和!% (not like) 运算符。

    friends.#(last=="Murphy").first    >> "Dale"
    friends.#(last=="Murphy")#.first   >> ["Dale","Jane"]
    friends.#(age>45)#.last            >> ["Craig","Murphy"]
    friends.#(first%"D*").last         >> "Murphy"
    friends.#(first!%"D*").last        >> "Craig"
    friends.#(nets.#(=="fb"))#.first   >> ["Dale","Roger"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    这样我们查找起来就非常方便了。

  • 相关阅读:
    css溢出隐藏的五种方法
    IOC容器(详细讲解)
    Linux的基本使用(二)文件操作命令
    桌面运维类面试非技术问题
    一个函数如何实现return好几个返回值(借鉴学习前辈的文章,链接放文章里了)
    仿写el-upload组件,彻底搞懂文件上传
    Unix System V BSD POSIX 究竟是什么?
    CMSC5707-高级人工智能之语音识别
    网络协议从入门到底层原理学习(二)—— Mac地址/IP地址
    前端图片上传
  • 原文地址:https://blog.csdn.net/weixin_40425640/article/details/127243344