jsonファイルを解析するGo依存パッケージ

3931 ワード

前回golangがjsonプロファイルを読み込むには、encoding/jsonパケットを使用してjsonファイルを解析する方法を紹介しましたが、この方法は構造が複雑で、フィールドが多い場合、解析効率があまり高くありません.前編では、jsonファイルを解析する際に、解析後の対応する構造体をコードで定義しておく必要があり、面倒です.今日の主役jsonparserは、ファイルをロードする構造を理解する必要はありません.それらのパスを提供することでアクセスできます.それはjsonコンテンツを迅速に抽出することができ、encoding/jsonパケットの速度より10倍ほど高い.jsonparserがこのように速いのは、次のような理由からです.
  • encoding/jsonreflectionまたはinterface{}に依存せず、唯一の依存パケットはbytesである.
  • バイトレベルでjsonを操作し、元のデータ構造へのポインタを提供し、メモリ割り当てがない.
  • には自動タイプ変換はありません.デフォルトでは、すべてのコンテンツはバイトスライスですが、値タイプが提供されているので、
  • を自分で変換できます.
  • 完全な内容は解析されず、指定したフィールド
  • のみが解析されます.
    次のコードでその使用を理解します.
    package main
    
    import (
        "github.com/buger/jsonparser"
        "fmt"
    )
    
    func main() {
        data := []byte(`{
      "person": {
        "name":{
          "first": "Leonid",
          "last": "Bugaev",
          "fullName": "Leonid Bugaev"
        },
        "github": {
          "handle": "buger",
          "followers": 109
        },
        "avatars": [
          { "url": "https://avatars1.githubusercontent.com/u/14009?v=3&s=460", "type": "thumbnail" }
        ]
      },
      "company": {
        "name": "Acme"
      }
    }`)
    
        result, err := jsonparser.GetString(data, "person", "name", "fullName")
        if err != nil {
            fmt.Println(err)
        }
        fmt.Println(result)
    
        content, valueType, offset, err := jsonparser.Get(data, "person", "name", "fullName")
        if err != nil {
            fmt.Println(err)
        }
        fmt.Println(content, valueType, offset)
        //jsonparser     bool、string、float64  int64     ,      ,      valueType         
        result1, err := jsonparser.ParseString(content)
        if err != nil {
            fmt.Println(err)
        }
        fmt.Println(result1)
    
        err = jsonparser.ObjectEach(data, func(key []byte, value []byte, dataType jsonparser.ValueType, offset int) error {
            fmt.Printf("key:%s
    value:%s
    Type:%s
    "
    , string(key), string(value), dataType) return nil }, "person", "name") }

    参考記事
  • buger/jsonparser