jsonファイルを解析するGo依存パッケージ
3931 ワード
前回golangがjsonプロファイルを読み込むには、 バイトレベルでjsonを操作し、元のデータ構造へのポインタを提供し、メモリ割り当てがない. には自動タイプ変換はありません.デフォルトでは、すべてのコンテンツはバイトスライスですが、値タイプが提供されているので、 を自分で変換できます.完全な内容は解析されず、指定したフィールド のみが解析されます.
次のコードでその使用を理解します.
参考記事 buger/jsonparser
encoding/json
パケットを使用してjsonファイルを解析する方法を紹介しましたが、この方法は構造が複雑で、フィールドが多い場合、解析効率があまり高くありません.前編では、jsonファイルを解析する際に、解析後の対応する構造体をコードで定義しておく必要があり、面倒です.今日の主役jsonparser
は、ファイルをロードする構造を理解する必要はありません.それらのパスを提供することでアクセスできます.それはjsonコンテンツを迅速に抽出することができ、encoding/json
パケットの速度より10倍ほど高い.jsonparser
がこのように速いのは、次のような理由からです.encoding/json
、reflection
またはinterface{}
に依存せず、唯一の依存パケットはbytes
である.次のコードでその使用を理解します.
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")
}
参考記事