Golang Json
5360 ワード
Json文法
JSON文法規則
JSON文法はJavaScriptオブジェクトが文法を表すサブセットです.データはキーパッドペア にあります.データはカンマ区切り です.かっこ保存オブジェクト 四角括弧保存配列 JSON名称/値ペア
JSONデータの書き方は、名称/値のペアです.名前/値ペアの組み合わせの名前は前に書いてください.値ペアは後ろに書いてください.中間はコロンで区切られます.
JSON値は、-数字(整数または浮動小数点)-文字列(二重引用符)-論理値(trueまたはfalse)-配列(四角い括弧内)-オブジェクト(かっこ内)-nullとすることができます.
基礎構造
JSON構造には2つの構造があります.即ち、オブジェクトと配列の2つの構造であり、この2つの構造によって様々な複雑な構造を表すことができます.
オブジェクト
対象はjsで「{}」と表示されている内容で、データ構造は{key:value,key:value,...}のキー値ペアの構造であり、対象に向けた言語ではkeyが対象の属性であり、valueが対応する属性値であるため、受け取り方が対象となります.keyは属性値を取ります.この属性値のタイプは数字、文字列、配列、配列、となります.オブジェクトはいくつかあります
行列
配列はjsの中で括弧「[]」で囲まれた内容で、データ構造は「java」、「javascript」、「vb」、…」であり、値の取り方はすべての言語と同じで、索引を用いて取得します.フィールド値の種類は数字、文字列、配列、オブジェクトの何種類かであることができます.
オブジェクト、配列の2つの構造を経て複雑なデータ構造に組み合わせることができます.
基本例
名前/値ペア
一番簡単な形式で、以下のようなJSONで「名称/値ペア」を表してもいいです.
は、行列を表します
一組の値を表す必要がある場合、JSONは読み取り可能性を高めるだけでなく、複雑さを低減することができる.例えば、人名リストを表示することを望むとします.XMLには多くの開始マークと終了マークが必要です.典型的な名前/値ペアを使用する場合は、独自のデータフォーマットを確立するか、またはキー名をperson 1-first Nameのような形に変更する必要があります.JSONを使用する場合は、複数のかっこの記録をグループ化するだけでよい.
golang Json
Go言語のJSONライブラリ
Go言語のJSON変換庫はencoding/jsonです.
1.対象をJSONに変換する方法(関数)はJson.Masharl()で、その関数の原型は以下の通りです.
func Masharl(v interface{}([]byte、error)
つまり、この関数は任意のタイプのデータvを受信し、バイトの配列タイプに変換し、戻り値は私たちが欲しいJSONデータとエラーコードです.変換に成功した時、このエラーコードはnilです.
オブジェクトをJSONに変換する過程では、以下のいくつかのルールに従います.
•ブール型はJSONに変換した後もブール型で、例えばtrue->true
•浮動小数点型と整数型の変換後はJSONの中の通常の数字で、1.23->1.23のようです.
•文字列はUTF-8符号化でUnicode文字セットの文字列に出力されます.特殊文字は例えば
•配列とスライスはJSON内の配列に変換され、[]byte類はbase 64符号化後の文字列に変換され、sliceのゼロ値はnullに変換されます.
•構造的な理解はJSONオブジェクトに変換され、構造体の中で大文字で始まる導き出すことができるフィールドだけが出力に変換されます.これらの導き出すことができるフィールドはJSONオブジェクトの文字列索引となります.
•mapタイプのデータ構造を変換する場合、このデータのタイプは必ずmap[string]T(Tはencoding/jsonパッケージでサポートされる任意のデータタイプであっても良いです.)
2.JSONを対象に戻す方法(関数)はJson.Unimashel()で、その関数の原型は以下の通りです.
func Unimasharl(data[]byte,v interface{}error
この関数は入ってきたdataをJSONとして解析し、解析したデータをパラメータvに格納します.このパラメータvも任意のタイプのパラメータである(ただし、一定の種類の指針である).その理由は、この関数でJSON解析を行う場合、この関数はこの着信パラメータの特定のタイプを知らないので、すべてのタイプを受信する必要があるからである.
解析を行う際には、JSONとオブジェクトの構造が違っていれば何が発生しますか?これは、解析関数Json.Unimasharl()が以下の規則に従う必要があります.
•Json.Unimasharl()関数は、所定の順序でターゲット構造のフィールドを検索します.もし一つが見つかったらマッチします.何が見つかりましたか?「見つけました」については、JSONオブジェクトに「Foo」というインデックスがあると仮定して、「Foo」に対応する値をターゲット構造体のターゲットフィールドに塗り込めます.Json.Unimashel()は以下の順序で検索します.
§Fooタグを含むフィールド
§Fooというフィールド
§FooまたはFooという名前で、または頭文字以外の文字は大文字と小文字を区別しないで書くFooというフィールドです.これらのフィールドは、タイプ宣言ではすべて大文字で始まる必要があります.エクスポート可能なフィールドです.
JSONのフィールドがGoターゲットタイプに存在しない場合、Json.Unimasharl()関数は復号中にこのフィールドを破棄します.
•JSONの構造が未知の場合は、以下の規則に従います.
§JSONのブール値はGoのブールタイプに変換されます.
§値はGoのfloat 64タイプに変換されます.
§文字列変換後もstringタイプ
§JSON配列は[]interface{}タイプに変換されます.
§JSONオブジェクトは、map[string]interface{}タイプに変換されます.
§null値はnilに変換されます.
JSON文法規則
JSON文法はJavaScriptオブジェクトが文法を表すサブセットです.
JSONデータの書き方は、名称/値のペアです.名前/値ペアの組み合わせの名前は前に書いてください.値ペアは後ろに書いてください.中間はコロンで区切られます.
"firstName":"John"
これは分かりやすいです.このJavaScript文と同じです.firstName="John"
JSON値JSON値は、-数字(整数または浮動小数点)-文字列(二重引用符)-論理値(trueまたはfalse)-配列(四角い括弧内)-オブジェクト(かっこ内)-nullとすることができます.
基礎構造
JSON構造には2つの構造があります.即ち、オブジェクトと配列の2つの構造であり、この2つの構造によって様々な複雑な構造を表すことができます.
オブジェクト
対象はjsで「{}」と表示されている内容で、データ構造は{key:value,key:value,...}のキー値ペアの構造であり、対象に向けた言語ではkeyが対象の属性であり、valueが対応する属性値であるため、受け取り方が対象となります.keyは属性値を取ります.この属性値のタイプは数字、文字列、配列、配列、となります.オブジェクトはいくつかあります
行列
配列はjsの中で括弧「[]」で囲まれた内容で、データ構造は「java」、「javascript」、「vb」、…」であり、値の取り方はすべての言語と同じで、索引を用いて取得します.フィールド値の種類は数字、文字列、配列、オブジェクトの何種類かであることができます.
オブジェクト、配列の2つの構造を経て複雑なデータ構造に組み合わせることができます.
基本例
名前/値ペア
一番簡単な形式で、以下のようなJSONで「名称/値ペア」を表してもいいです.
{"firstName":"Brett"}
この例は非常に基本的で、実際には等価な純粋なテキストの名前/値ペアよりも多くの空間を占有しています.firstName=Brett
しかし、複数の「名前/値ペア」を連結すると、JSONはその価値を表します.まず、複数の「名前/値ペア」を含むレコードを作成できます.{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"}
文法的には、「名前/値ペア」に比べて大きな利点はないが、この場合はJSONの方が使いやすく、読み取り可能性も高い.例えば、上記の3つの値は同じ記録の一部であることを明確に示す.括弧を使って、これらの値に何らかの関係があるようにします.は、行列を表します
一組の値を表す必要がある場合、JSONは読み取り可能性を高めるだけでなく、複雑さを低減することができる.例えば、人名リストを表示することを望むとします.XMLには多くの開始マークと終了マークが必要です.典型的な名前/値ペアを使用する場合は、独自のデータフォーマットを確立するか、またはキー名をperson 1-first Nameのような形に変更する必要があります.JSONを使用する場合は、複数のかっこの記録をグループ化するだけでよい.
{
"people":[
{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},
{"firstName":"Jason","lastName":"Hunter","email":"bbbb"},
{"firstName":"Elliotte","lastName":"Harold","email":"cccc"}
]
この例では、名前と姓と電子メールアドレスが含まれている、peopleという変数だけがあります.上記の例では、かっこでレコードを一つの値に組み合わせる方法を示します.もちろん、同じ構文を使用して複数の値(各値は複数のレコードを含む)を表すことができる.{
"programmers": [{
"firstName": "Brett",
"lastName": "McLaughlin",
"email": "aaaa"
}, {
"firstName": "Jason",
"lastName": "Hunter",
"email": "bbbb"
}, {
"firstName": "Elliotte",
"lastName": "Harold",
"email": "cccc"
}],
"authors": [{
"firstName": "Isaac",
"lastName": "Asimov",
"genre": "sciencefiction"
}, {
"firstName": "Tad",
"lastName": "Williams",
"genre": "fantasy"
}, {
"firstName": "Frank",
"lastName": "Peretti",
"genre": "christianfiction"
}],
"musicians": [{
"firstName": "Eric",
"lastName": "Clapton",
"instrument": "guitar"
}, {
"firstName": "Sergei",
"lastName": "Rachmaninoff",
"instrument": "piano"
}]
}
ここで最も注目すべきことは、複数の値を表すことができ、各値はさらに複数の値を含むことである.しかし、異なる主要項目の間では、実際の名前/値ペアが異なることもあることに留意すべきである.JSONは完全に動的であり、JSON構造の中間でデータを表す方式を変更することができる.JSON形式のデータを扱う際には、守るべき規定の制約がありません.したがって、同じデータ構造では、データを表す方式を変えることができ、同じものを異なる形で表すこともできる.golang Json
Go言語のJSONライブラリ
Go言語のJSON変換庫はencoding/jsonです.
1.対象をJSONに変換する方法(関数)はJson.Masharl()で、その関数の原型は以下の通りです.
func Masharl(v interface{}([]byte、error)
つまり、この関数は任意のタイプのデータvを受信し、バイトの配列タイプに変換し、戻り値は私たちが欲しいJSONデータとエラーコードです.変換に成功した時、このエラーコードはnilです.
オブジェクトをJSONに変換する過程では、以下のいくつかのルールに従います.
•ブール型はJSONに変換した後もブール型で、例えばtrue->true
•浮動小数点型と整数型の変換後はJSONの中の通常の数字で、1.23->1.23のようです.
•文字列はUTF-8符号化でUnicode文字セットの文字列に出力されます.特殊文字は例えば
•配列とスライスはJSON内の配列に変換され、[]byte類はbase 64符号化後の文字列に変換され、sliceのゼロ値はnullに変換されます.
•構造的な理解はJSONオブジェクトに変換され、構造体の中で大文字で始まる導き出すことができるフィールドだけが出力に変換されます.これらの導き出すことができるフィールドはJSONオブジェクトの文字列索引となります.
•mapタイプのデータ構造を変換する場合、このデータのタイプは必ずmap[string]T(Tはencoding/jsonパッケージでサポートされる任意のデータタイプであっても良いです.)
2.JSONを対象に戻す方法(関数)はJson.Unimashel()で、その関数の原型は以下の通りです.
func Unimasharl(data[]byte,v interface{}error
この関数は入ってきたdataをJSONとして解析し、解析したデータをパラメータvに格納します.このパラメータvも任意のタイプのパラメータである(ただし、一定の種類の指針である).その理由は、この関数でJSON解析を行う場合、この関数はこの着信パラメータの特定のタイプを知らないので、すべてのタイプを受信する必要があるからである.
解析を行う際には、JSONとオブジェクトの構造が違っていれば何が発生しますか?これは、解析関数Json.Unimasharl()が以下の規則に従う必要があります.
•Json.Unimasharl()関数は、所定の順序でターゲット構造のフィールドを検索します.もし一つが見つかったらマッチします.何が見つかりましたか?「見つけました」については、JSONオブジェクトに「Foo」というインデックスがあると仮定して、「Foo」に対応する値をターゲット構造体のターゲットフィールドに塗り込めます.Json.Unimashel()は以下の順序で検索します.
§Fooタグを含むフィールド
§Fooというフィールド
§FooまたはFooという名前で、または頭文字以外の文字は大文字と小文字を区別しないで書くFooというフィールドです.これらのフィールドは、タイプ宣言ではすべて大文字で始まる必要があります.エクスポート可能なフィールドです.
JSONのフィールドがGoターゲットタイプに存在しない場合、Json.Unimasharl()関数は復号中にこのフィールドを破棄します.
•JSONの構造が未知の場合は、以下の規則に従います.
§JSONのブール値はGoのブールタイプに変換されます.
§値はGoのfloat 64タイプに変換されます.
§文字列変換後もstringタイプ
§JSON配列は[]interface{}タイプに変換されます.
§JSONオブジェクトは、map[string]interface{}タイプに変換されます.
§null値はnilに変換されます.