ホームページ >バックエンド開発 >Golang >Go Lang でのネストされた非構造化 JSON の処理

Go Lang でのネストされた非構造化 JSON の処理

WBOY
WBOY転載
2024-02-11 22:36:091031ブラウズ

在 Go Lang 中处理嵌套非结构化 JSON

Go Lang でネストされた非構造化 JSON を処理することは重要なタスクです。 JSON (JavaScript Object Notation) は一般的に使用されるデータ交換形式ですが、JSON データが複雑にネストされている場合、処理が困難になる場合があります。 PHP エディターの Yuzai は、このデータをより効率的に解析して操作できるように、Go Lang でネストされた非構造化 JSON を処理するためのいくつかの方法とテクニックを紹介します。これらのスキルを習得すると、複雑な JSON データを簡単に処理できるようになり、コードの可読性と保守性が向上します。

質問内容

golangで非構造化jsonデータから特定のデータにアクセスする方法を理解しようとしています。次のjsonがあり、foo1に空のfoo2とは異なるデータがあるときに、マテリアルの下の「foo1」にアクセスしようとしています。 foo1 のようなオブジェクトにデータがある場合、同じ名前の分類セクションからデータを読み取る必要もあります。例えば。マテリアルセクションの foo1 にはデータがあるため、マテリアル -> foo1 のメソッドキー値とカテゴリ -> foo1 の記述を出力する必要がありました。

リーリー

foo1 が空でない場合、期待される出力:

package main

import (
    "encoding/json"
    "fmt"
)


type new struct {
    desc string `json:"desc"`
}

func main() {
    bjson := `{ 
                "classifications": { "foo1": { "desc": "it may be possible.", "sol": "the backups.", "ref": { "sensitive information": "https://www.sensitive_information.html", "control sphere": "https://ww.example.org/data.html" },"bar1": { "desc": "the target", "sol": "should be used.", "ref": { "abc: srgery": "https://www.orp.org/" } }}, 
               
                "material": { "backup file": [],"foo1": [ { "method": "get", "info": "it is not set", "level": 1, "parameter": "", "referer": "", "module": "diq", "curl_command": "curl \"https://example.com/\"", "wsg": [ "conf-12", "o-policy" ] }],"foo2": [],"bar1": []},
         
                "anomalies": { "server error": [], "resource consumption": [] }, 
                
                "additionals": { "web technology": [], "methods": [] }, 

                "infos": { "url": "https://example.com/", "date": "thu, 08 dec 2022 06:52:04 +0000"}}}`


    
        var parseddata = make(map[string]map[string]new)
    json.unmarshal([]byte(bjson), &parseddata)
    fmt.println("output of parseddata - \n", parseddata["classifications"]["foo1"].desc)
    
    //for _, v := range parseddata["material"] {
    //  fmt.println(v)
    //}
}

回避策

これを map[string]interface{} 変数にアンマーシャリングし、一連の型アサーションを使用して必要な情報を取得できます。例: ### リーリー

上記の出力は次のとおりです:

リーリー

これは、コードの完全な実行可能なバージョンです:

リーリー

これをビルドすると:

リーリー

仕組みは次のとおりです:

リーリー

値が存在しないか、空のリストであるかどうかを確認します:

リーリー

以上がGo Lang でのネストされた非構造化 JSON の処理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。