16

私は次のコードを持っています.PHPサーバーに接続してデータを正常に取得します.私はVBがあまり得意ではありません.JSON応答テキストを読んでその要素を抽出するにはどうすればよいですか?

Public Class Form1
    Private Sub submit_Click(sender As System.Object, e As System.EventArgs) Handles submit.Click
        Dim user As String
        Dim pass As String
        user = uname.Text
        pass = passwd.Text

        Dim request As WebRequest = WebRequest.Create("http://domain.com/test.php")
        request.Method = "POST"
        Dim postData As String
        postData = "username=" & user & "&password=" & pass
        Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
        request.ContentType = "application/x-www-form-urlencoded"
        request.ContentLength = byteArray.Length
        Dim dataStream As Stream = request.GetRequestStream()
        dataStream.Write(byteArray, 0, byteArray.Length)
        dataStream.Close()
        Dim response As WebResponse = request.GetResponse()
        Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
        dataStream = response.GetResponseStream()
        Dim reader As New StreamReader(dataStream)
        Dim responseFromServer As String = reader.ReadToEnd()
        If responseFromServer = "0" Then
            MsgBox("Login Failed")
        Else
            MsgBox("json data")
        End If
        reader.Close()
        dataStream.Close()
        response.Close()
    End Sub
End Class

JSON 応答は次のようになります。

{"comments": [
               {
               "comment" : "some text",
               "date"    : "some date",
               "user"    : "user name"
               },
               {
               "comment" : "some text",
               "date"    : "some date",
               "user"    : "user name"
               }
             ],
 "messages": [ .... ]
}

json 文字列を出力する方法:

Comments
user      date      comment
-----------------------------------
user 1    date 1    comment 1
user 2    date 2    comment 2

Messages
user      date      message
-----------------------------------
user 1    date 1    message 1
user 2    date 2    message 2
4

4 に答える 4

24

長い調査と多くのテストの結果、 という非常に優れた拡張機能を見つけました。これは非常にシンプルで、次のようNewtonsoft.jsonにインストールできます。package manager console

install-package Newtonsoft.json

そして、次のように含めます。

Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq

次に、要素の名前と値を次のように宣言するだけです。

Else
    Dim json As String = responseFromServer
    Dim ser As JObject = JObject.Parse(json)
    Dim data As List(Of JToken) = ser.Children().ToList
    Dim output As String = ""

    For Each item As JProperty In data
        item.CreateReader()
        Select Case item.Name
            Case "comments"
                output += "Comments:" + vbCrLf
                For Each comment As JObject In item.Values
                    Dim u As String = comment("user")
                    Dim d As String = comment("date")
                    Dim c As String = comment("comment")
                    output += u + vbTab + d + vbTab + c + vbCrLf
                Next

            Case "messages"
                output += "Messages:" + vbCrLf
                For Each msg As JObject In item.Values
                    Dim f As String = msg("from")
                    Dim t As String = msg("to")
                    Dim d As String = msg("date")
                    Dim m As String = msg("message")
                    Dim s As String = msg("status")
                    output += f + vbTab + t + vbTab + d + vbTab + m + vbTab + s + vbCrLf
                Next

        End Select
    Next
    MsgBox(output)
End If

誰かがこれが役に立つことを願っています

于 2013-04-14T19:17:08.073 に答える
8

@razzak が Json.Net NuGet パッケージを使用することは絶対に正しいです。これを大幅に削減する別のオプションは、組み込みの DeserializeObject 関数を使用することです。適切に定義されたモデルがある限り、次のようなものを使用して Json をオブジェクトのインスタンスに逆シリアル化できます。

dim myObject as MyDefinedObject = JsonConvert.DeserializeObject(responseFromServer)

またはこれをC#で

MyDefinedObject m = JsonConvert.DeserializeObject<MyDefinedObject>(responseFromServer);

また、ループしたくない場合は、次のような方法でトークンを選択することもできます:

Dim d = ser.SelectToken("$..resources[?(@)].travelDistance")

上記のコードは、Bing API から 2 地点間の travelDistance を特定するために使用されました。Bing または Google Map REST API を扱ったことがある場合は、非常に具体的な値を探しているときに、JSON が一般に大きすぎてデータをループできないことをご存知でしょう。

JSON.Net Web サイトには、いくつかの追加の例を紹介するブログ ページがあります。

http://james.newtonking.com/json

于 2014-04-09T17:14:25.100 に答える
2

使用するには

Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq

「Json.Net」ライブラリをインストールする必要があります。

スクリーンショット

于 2016-07-14T21:48:22.907 に答える
0
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq

これは、YouTube API V.3
のVB.netでそれをカットしているようです。もちろん、達成しようとしていることによって異なりますが、YoutubeはJson形式としてデータを返します

于 2015-09-18T22:28:25.450 に答える