DOBON.NETプログラミング道掲示板

No35408 の記事


■35408 / )  Re[1]: JSONの複雑な入れ子内部の値を取りたい。
□投稿者/ Hongliang 大御所(639回)-(2023/05/08(Mon) 21:24:21)
  • アイコン> TextBox1.Text = jsonNode("Feature").Item("Id").ToString
    > 「System.InvalidOperationException: 'The node must be of type 'JsonObject'.'」

    > "Feature": ['・・・・・・・・・・・・・・・・・・・・・・・・・・・D
    > {
    > "Id": "8d8acd6f1e7d81d5d10a9a18e8e927ec",

    Featureは配列型ですね。
    jsonNode("Feature")(0)("Id")
    のように、Featureの、先頭要素の、Idプロパティ、とアクセスする必要があります。

    > TextBox1.Text = jsonNode("Property").ToString
    > TextBox1.Text = jsonNode("Station").ToString
    > 「System.NullReferenceException: 'Object reference not set to an instance of an object.'System.Text.Json.Nodes.JsonNode.this[string].get が Nothing を返しました。」

    jsonNodeがルート指したままであれば(Parseしたのを代入したままで再代入していないのであれば)、jsonNodeはこのJSONのルートオブジェクトを指しています。
    JSONのルートオブジェクトは、ResultInfoとFeatureの2つのプロパティしか持っていないので、("Property") や ("Station") は何も返すことができません。
    Dim feature As JsonNode = jsonNode("Feature")(0)
    としたうえで
    .Text = feature("Property").ToString()
    .Text = feature("Property")("Station").ToString()
    とか、更に
    Dim prop As JsonNode = feature("Property")
    .Text = prop.ToString()
    .Text = prop("Station").ToString()
    とするとかする必要があります。

    お使いのVisual Studioによっては、「形式を指定して貼り付け」を使えるかもしれません。
    https://qiita.com/Midoliy/items/362bbb95a5c78c6aa401
    // VBでも使えるかどうかは不明。
    あるいはJSONからC#クラスへの変換はネットにサービスとしても存在しているので、
    https://json2csharp.com/
    さらにC#-VB変換サービスを適用することでもクラス生成はできそうです。

    これらでクラスを生成できれば、JsonNodeを使わずとも、
    System.Text.Json.JsonSerialzier.Deserialize(Of 生成したクラス)
    メソッドを使ってオブジェクトとして扱うことができます。
違反を報告
返信 削除キー/


Mode/  Pass/


- Child Tree -