Go非整列化を使用して複雑なJSONを解析する方法は?

井戸:

ではgo標準パッケージのエンコード/ JSONが公開json.Unmarshal機能は、JSONを解析します。

事前定義されたのJSON文字列を非整列化するかstruct、を使用してinterface{}、予期しないJSONデータ構造の結果を反復することができます。

そうは言っても、複雑なJSONを適切に解析することはできません。誰かがこれを達成する方法を教えてもらえますか?

 {
     "k1" : "v1", 
     "k2" : "v2", 
     "k3" : 10, 
     "result" : [
                 [
                 ["v4", v5, {"k11" : "v11", "k22" : "v22"}]
                 , ... , 
                 ["v4", v5, {"k33" : "v33", "k44" : "v44"}
                 ]
                 ], 
                 "v3"
                ] 
}
ヨハン・ウィストロム:

JSONとGoからの引用

このデータの構造を知らなくても、Unmarshalを使用してそれをinterface {}値にデコードできます。

b := []byte(`{
   "k1" : "v1", 
   "k3" : 10,
   result:["v4",12.3,{"k11" : "v11", "k22" : "v22"}]
}`)
var f interface{}
err := json.Unmarshal(b, &f)

この時点で、fのGo値は、キーが文字列であり、値自体が空のインターフェース値として格納されているマップになります。

f = map[string]interface{}{
    "k1": "v1",
    "k3":  10,
    "result": []interface{}{
       "v4",
       12.3,
       map[string]interface{}{
           "k11":"v11",
           "k22":"v22",
       },
    },
}

このデータにアクセスするには、型アサーションを使用して、f基になるmap [string] interface {} にアクセスします

m := f.(map[string]interface{})

次に、rangeステートメントでマップを反復処理し、型スイッチを使用して、具体的な型として値にアクセスできます。

for k, v := range m {
    switch vv := v.(type) {
    case string:
        fmt.Println(k, "is string", vv)
    case int:
        fmt.Println(k, "is int", vv)
    case []interface{}:
        fmt.Println(k, "is an array:")
        for i, u := range vv {
            fmt.Println(i, u)
        }
    default:
        fmt.Println(k, "is of a type I don't know how to handle")
    }
}

このようにして、タイプセーフのメリットを享受しながら、未知のJSONデータを操作できます。

GoとJSONの詳細については、元の記事をご覧ください。コードスニペットを少し変更して、質問のJSONに類似させました。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

gsonまたはjacksonを使用して複雑なjsonを解析する方法

分類Dev

golangは任意の複雑なjsonを非整列化する簡単な方法があります

分類Dev

Codableを使用してSwift4で複雑なJSONを解析する方法

分類Dev

Goで複雑なJSONを解析する

分類Dev

GOを使用したJSONの非整列化は失敗します。

分類Dev

restsharpを使用して複雑なJsonデータ(本体)を投稿する方法は?

分類Dev

jsonpbを使用して、oneof定義を含むprotobufにJSONを非整列化する方法は?

分類Dev

配列を使用してJSONを非整列化する

分類Dev

Go:複数の型を使用したJSONの非整列化

分類Dev

Goで複数のアイテムを含む単純なxmlを非整列化する方法は?

分類Dev

Goの複数の構造体でJSONを非整列化する

分類Dev

TypeScriptを使用して複雑なjsonオブジェクトを解析する

分類Dev

GoでYAMLを非整列化する方法

分類Dev

UnityでC#を使用して複雑なJSONオブジェクトを解析する方法

分類Dev

JavaScriptとRegExを使用して複雑なBibTexアイテムを解析する方法

分類Dev

JSON.net c#を使用して複雑なJSONを逆シリアル化する方法

分類Dev

swift4の少し複雑なjsonからデータを解析して取得する方法は?

分類Dev

Go langでJson文字列を非整列化して、1つのキーのみの値を取得する方法

分類Dev

Goを使用してFCM / GCMで複雑なデータを送信する方法

分類Dev

Goでhttp経由で取得したJSONを非整列化する方法

分類Dev

Javaの配列を使用して複雑なXMLを解析する

分類Dev

PHPを使用して複雑なXMLを解析する

分類Dev

Go-スライスを使用してXMLをコンテナー構造体に非整列化する方法

分類Dev

OpenRefine(またはR)を使用して大きくて複雑なJsonファイルを解析するための最良の方法

分類Dev

Goを使用してJSONを部分的に解析する方法は?

分類Dev

複雑なjsonまたは複雑なオブジェクトをParquetとしてSparkに保存する方法は?

分類Dev

golangでJSONを非整列化する方法

分類Dev

jsonを非整列化する方法

分類Dev

辞書を使用して次の複雑な構造をフレーム化する方法は?

Related 関連記事

  1. 1

    gsonまたはjacksonを使用して複雑なjsonを解析する方法

  2. 2

    golangは任意の複雑なjsonを非整列化する簡単な方法があります

  3. 3

    Codableを使用してSwift4で複雑なJSONを解析する方法

  4. 4

    Goで複雑なJSONを解析する

  5. 5

    GOを使用したJSONの非整列化は失敗します。

  6. 6

    restsharpを使用して複雑なJsonデータ(本体)を投稿する方法は?

  7. 7

    jsonpbを使用して、oneof定義を含むprotobufにJSONを非整列化する方法は?

  8. 8

    配列を使用してJSONを非整列化する

  9. 9

    Go:複数の型を使用したJSONの非整列化

  10. 10

    Goで複数のアイテムを含む単純なxmlを非整列化する方法は?

  11. 11

    Goの複数の構造体でJSONを非整列化する

  12. 12

    TypeScriptを使用して複雑なjsonオブジェクトを解析する

  13. 13

    GoでYAMLを非整列化する方法

  14. 14

    UnityでC#を使用して複雑なJSONオブジェクトを解析する方法

  15. 15

    JavaScriptとRegExを使用して複雑なBibTexアイテムを解析する方法

  16. 16

    JSON.net c#を使用して複雑なJSONを逆シリアル化する方法

  17. 17

    swift4の少し複雑なjsonからデータを解析して取得する方法は?

  18. 18

    Go langでJson文字列を非整列化して、1つのキーのみの値を取得する方法

  19. 19

    Goを使用してFCM / GCMで複雑なデータを送信する方法

  20. 20

    Goでhttp経由で取得したJSONを非整列化する方法

  21. 21

    Javaの配列を使用して複雑なXMLを解析する

  22. 22

    PHPを使用して複雑なXMLを解析する

  23. 23

    Go-スライスを使用してXMLをコンテナー構造体に非整列化する方法

  24. 24

    OpenRefine(またはR)を使用して大きくて複雑なJsonファイルを解析するための最良の方法

  25. 25

    Goを使用してJSONを部分的に解析する方法は?

  26. 26

    複雑なjsonまたは複雑なオブジェクトをParquetとしてSparkに保存する方法は?

  27. 27

    golangでJSONを非整列化する方法

  28. 28

    jsonを非整列化する方法

  29. 29

    辞書を使用して次の複雑な構造をフレーム化する方法は?

ホットタグ

アーカイブ