如何从 JSON 数组中获取所有值

How to get all the values from a JSON array

我正在尝试从 JSON 数组中获取所有键。 JSON的link是:this one

我使用的代码是:

Imports System.Net.Http
Imports System.Text.Json.Nodes
Public Class Form1
    Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Using http = New HttpClient
            Dim url = "https://api-cloud.bitmart.com/account/v1/currencies"
            Dim json = JsonNode.Parse(Await http.GetStreamAsync(url))
            Dim naming As [String] = json("currency") 

            RichTextBox1.Text = json("currency")
        End Using
    End Sub
End Class

但是单击按钮不会填充任何内容。 RichTextBox 保持为空, 虽然我想获得所有值 ( es : "DFC, "$GM", "BBK" ecc)

我正在使用 .net6,但我将不胜感激 framework.net 解决方案。 谢谢

.Net核心答案

看看我下面的建议。我可以看到您在解析 Json 数据以及未获取 GetStreamAsync 操作的 result 时缺少几个步骤。

Dim streamData As Stream = Nothing
Using http As HttpClient = New HttpClient
    Dim url As String = "https://api-cloud.bitmart.com/account/v1/currencies"

    Dim t As Task(Of Stream) = http.GetStreamAsync(url)
    streamData = t.Result
End Using

Dim jsonResponse As JsonNode = JsonNode.Parse(streamData)
Dim jsonData As JsonNode = jsonResponse("data")
Dim jsonCurrencies As JsonNode = jsonData("currencies")

Dim c As String = String.Empty
Dim n As String = String.Empty
For Each jsonCurrency As JsonNode In jsonCurrencies.AsArray()
    c += jsonCurrency("currency").ToString + " "
    n += jsonCurrency("network").ToString + " "
Next


Debug.WriteLine(c)
Debug.WriteLine(n)

这将输出从以下位置下载的所有货币:https://api-cloud.bitmart.com/account/v1/currencies

我的测试程序不能很好地处理 Async/Await 操作,所以我删除了对 Await 的调用。我相信你可以毫无问题地把它放回去。

这是 .Net Core 的答案,我相信对于 .Net Framework,您需要使用不同的 Json 解析器,例如 Newtonsoft。

.Net Framework 4.8 答案

此版本使用了 Newtonsoft Json parser,与 .Net Core 版本略有不同,因为它使用了 Async/Await

Private Async Sub DownloadData()
    Dim jsonString As String
    Using http As HttpClient = New HttpClient
        Dim url As String = "https://api-cloud.bitmart.com/account/v1/currencies"

        Dim streamData As Stream = Await http.GetStreamAsync(url)

        Using sr As StreamReader = New StreamReader(streamData)
            jsonString = sr.ReadToEnd
        End Using
        streamData.Close()
    End Using

    Dim jsonResponse As JObject = JObject.Parse(jsonString)
    Dim jsonData As JObject = CType(jsonResponse("data"), JObject)
    Dim jsonCurrencies As JArray = CType(jsonData("currencies"), JArray)

    Dim c As String = String.Empty
    Dim n As String = String.Empty
    For Each jsonCurrency As JObject In jsonCurrencies
        c += jsonCurrency("currency").ToString + " "
        n += jsonCurrency("network").ToString + " "
    Next

    Debug.WriteLine(c)
    Debug.WriteLine(n)
End Sub