专注VB编程开发20年

专注VB编程开发20年

  • 在VB.NET中,您可以使用Newtonsoft.Json程序包来处理JSON数据。为了方便获取多级JSON数据,您可以使用JObject类的SelectToken方法。以下是一个示例代码:

    Imports Newtonsoft.Json
    Imports Newtonsoft.Json.Linq
    
    Public Sub Main()
        Dim jsonString As String = "{ 'a': 'abcd', 'b': 3333, 'c': [11, 22, 33], 'd': { 'd1': 'ddddd', 'd2': 'dddd2', 'd3': [11, 22, 33, 44, { 'd3str': 'd3d3d3', 'd3obj': { 'd3a': '33a', 'd3b': 'bbbbb' } }] } }"
    
        Dim jsonObject As JObject = JObject.Parse(jsonString)
    
        Dim d1Value As String = jsonObject.SelectToken("d.d1").ToString()
    
        Console.WriteLine(d1Value)
    End Sub
    

    在上面的示例中,我们首先定义了一个JSON字符串jsonString,其中包含多级嵌套的JSON数据。

    然后,我们使用JObject.Parse方法将JSON字符串解析为JObject对象。

    接下来,我们使用SelectToken方法并传入路径字符串"d.d1"来获取d.d1的值。最后,我们使用ToString方法将值转换为字符串,并使用Console.WriteLine打印出来。

    通过使用SelectToken方法,您可以方便地获取多级JSON数据,而不需要使用多个Item方法。

  • System.Text.Json如何实现取多级JSON子数据,类似Newtonsoft.Json.SelectToken("d.d1").ToString()
  • System.Text.Json中,您可以使用JsonDocument类和JsonElement类来实现获取多级JSON子数据。以下是一个示例代码:

    Imports System.Text.Json
    
    Public Sub Main()
        Dim jsonString As String = "{ 'a': 'abcd', 'b': 3333, 'c': [11, 22, 33], 'd': { 'd1': 'ddddd', 'd2': 'dddd2', 'd3': [11, 22, 33, 44, { 'd3str': 'd3d3d3', 'd3obj': { 'd3a': '33a', 'd3b': 'bbbbb' } }] } }"
    
        Dim jsonDocument As JsonDocument = JsonDocument.Parse(jsonString)
    
        Dim d1Value As JsonElement = jsonDocument.RootElement.GetProperty("d").GetProperty("d1")
    
        Console.WriteLine(d1Value.ToString())
    End Sub
    

    在上面的示例中,我们首先定义了一个JSON字符串jsonString,其中包含多级嵌套的JSON数据。

    然后,我们使用JsonDocument.Parse方法将JSON字符串解析为JsonDocument对象。

    接下来,我们使用RootElement属性获取根元素,并使用GetProperty方法连续获取子属性。在这个例子中,我们使用GetProperty("d")获取d属性,然后再使用GetProperty("d1")获取d1属性。

    最后,我们使用ToString方法将JsonElement对象转换为字符串,并使用Console.WriteLine打印出来。

    通过使用GetProperty方法和JsonElement对象,您可以方便地获取多级JSON子数据,类似于Newtonsoft.Json中的SelectToken方法。

  • System.Text.Json需要多次GetProperty才能获取子数据:GetProperty("d").GetProperty("d1")
    是否可以直接用d.d1这种方式取JSON多级数据,还有没有其他别的JSON组件能实现这种功能
  • System.Text.Json中,没有直接提供类似d.d1这种方式来获取多级JSON数据的功能。您需要使用多次的GetProperty方法来逐级获取子属性。

    如果您希望使用类似d.d1这种方式来获取多级JSON数据,可以考虑使用其他第三方JSON组件,例如Newtonsoft.JsonNewtonsoft.Json提供了SelectToken方法,可以使用类似路径的方式来获取多级JSON数据。

    除了Newtonsoft.Json,还有其他一些第三方JSON组件也提供了类似的功能,例如Json.NETJsonCpp等。您可以根据自己的需求选择适合的JSON组件来处理多级JSON数据。请注意,使用第三方组件可能需要额外的依赖项,并且可能会影响性能和可移植性。

  •  Dim jsonString As String = "{ 'a': 'abcd', 'b': 3333, 'c': [11, 22, 33], 'd': { 'd1': 'ddddd', 'd2': 'dddd2', 'd3': [11, 22, 33, 44, { 'd3str': 'd3d3d3', 'd3obj': { 'd3a': '33a', 'd3b': 'bbbbb' } }] } }"
    
        Dim jsonDocument As JsonDocument = JsonDocument.Parse(jsonString)
    
        Dim d1Value As JsonElement = jsonDocument.RootElement.GetProperty("d").GetProperty("d1")
    如何获取D.D3[2]的值?
  • System.Text.Json中,要获取D.D3[2]的值,您需要使用多次的GetProperty方法和EnumerateArray方法来逐级获取子属性和数组元素。以下是一个示例代码:

    复制Imports System.Text.Json
    
    Public Sub Main()
        Dim jsonString As String = "{ 'a': 'abcd', 'b': 3333, 'c': [11, 22, 33], 'd': { 'd1': 'ddddd', 'd2': 'dddd2', 'd3': [11, 22, 33, 44, { 'd3str': 'd3d3d3', 'd3obj': { 'd3a': '33a', 'd3b': 'bbbbb' } }] } }"
    
        Dim jsonDocument As JsonDocument = JsonDocument.Parse(jsonString)
    
        Dim d3Value As JsonElement = jsonDocument.RootElement.GetProperty("d").GetProperty("d3")
        Dim d3Array As JsonArrayEnumerator = d3Value.EnumerateArray()
        Dim d3Element As JsonElement = Nothing
    
        For i As Integer = 0 To 2
            d3Array.MoveNext()
            d3Element = d3Array.Current
        Next
    
        Console.WriteLine(d3Element.ToString())
    End Sub
    

    在上面的示例中,我们首先定义了一个JSON字符串jsonString,其中包含多级嵌套的JSON数据。

    然后,我们使用JsonDocument.Parse方法将JSON字符串解析为JsonDocument对象。

    接下来,我们使用GetProperty方法获取D.D3的值,并使用EnumerateArray方法获取D.D3的数组元素。

    然后,我们使用MoveNext方法和Current属性来遍历数组元素,直到达到索引为2的元素。

    最后,我们使用ToString方法将JsonElement对象转换为字符串,并使用Console.WriteLine打印出来。

    通过使用GetProperty方法、EnumerateArray方法和数组遍历,您可以获取D.D3[2]的值。

02-13 10:40