【问题标题】:Parsing Json in vb.net with newtonsot.json使用 newtonsoft.json 在 vb.net 中解析 Json
【发布时间】:2016-04-03 15:00:25
【问题描述】:

我有以下 json 字符串

{
  "extractorData" : {
"url" : "http://absa.co.za/Absacoza/Indices/Absa-Exchange-Rates",
"resourceId" : "4dd52d44301ebd50db87975bf5df9711",
"data" : [ {
  "group" : [ {
    "absa" : [ {
      "text" : "USD"
    } ]
  }, {
    "absa" : [ {
      "text" : "US Dollar"
    } ]
  }, {
    "absa" : [ {
      "text" : "*"
    } ]
  }, {
    "absa" : [ {
      "text" : "14.429"
    } ],
    "Buying" : [ {
      "text" : "14.429"
    } ]
  }, {
    "absa" : [ {
      "text" : "14.409"
    } ]
  }, {
    "absa" : [ {
      "text" : "14.404"
    } ]
  }, {
    "absa" : [ {
      "text" : "14.8323"
    } ],
    "Selling" : [ {
      "text" : "14.8323"
    } ]
  }, {
    "absa" : [ {
      "text" : "14.8373"
    } ]
  } ]
} ]
},
"pageData" : {
"statusCode" : 200,
"timestamp" : 1459675946038
 }
}

我还创建了以下类

 Public Class Rootobject
    Public Property extractorData As Extractordata
    Public Property pageData As Pagedata
 End Class

Public Class Extractordata
    Public Property url As String
    Public Property resourceId As String
    Public Property data() As Datum
End Class

Public Class Datum
    Public Property group() As Group
End Class

Public Class Group
    Public Property absa() As Absa
    Public Property Buying() As Buying
    Public Property Selling() As Selling
End Class

Public Class Absa
    Public Property text As String
End Class

Public Class Buying
    Public Property text As String
End Class

Public Class Selling
    Public Property text As String
End Class

Public Class Pagedata
    Public Property statusCode As Integer
    Public Property timestamp As Long
End Class

如何使用 newtonsoft.json 提取 Buying 和 Selling 的值?在过去的 4 个小时里,我一直在查看并尝试示例,但我仍然没有接近答案。我对 json 很陌生

请帮忙

【问题讨论】:

  • 如果你想解析它,你不需要那些类,你可以单独提取值。如果您想反序列化它,请使用这些类。不清楚你想要什么。
  • @Plutonix :无论如何,反序列化可能仍然是最简单的。 ;)
  • 也许有人可以提供代码示例?
  • 我刚刚在我的第一条评论中给了你一个链接。

标签: json vb.net json.net


【解决方案1】:

显然,由于您定义数组的方式,您的代码没有正确地废弃。以Public Property data As List(Of Datum)(等等)的形式而不是Public Property data() As Datum 可以解决问题。

可在此处找到完整且经过测试的代码。这是您反序列化 json 文本的方式:

Sub Main()

    Dim jsonAsText = File.ReadAllText("C:\Path\To\json.txt")
    Dim deserializedRootObject = Newtonsoft.Json.JsonConvert.DeserializeObject(Of RootObject)(jsonAsText)

End Sub

此反序列化使用RootObject 及其子对象,如下所示:

Public Class Absa
    Public Property text As String
End Class

Public Class Buying
    Public Property text As String
End Class

Public Class Selling
    Public Property text As String
End Class

Public Class Group
    Public Property absa As List(Of Absa)
    Public Property Buying As List(Of Buying)
    Public Property Selling As List(Of Selling)
End Class

Public Class Datum
    Public Property group As List(Of Group)
End Class

Public Class ExtractorData
    Public Property url As String
    Public Property resourceId As String
    Public Property data As List(Of Datum)
End Class

Public Class PageData
    Public Property statusCode As Integer
    Public Property timestamp As Long
End Class

Public Class RootObject
    Public Property extractorData As ExtractorData
    Public Property pageData As PageData
End Class

【讨论】:

  • 谢谢泽维尔。你的例子帮助我让它工作
【解决方案2】:

您可以尝试从 newtonsoft.com 获取的示例 Bellow

    string json = @"{
    'Email': 'james@example.com',
    'Active': true,
    'CreatedDate': '2013-01-20T00:00:00Z',
    'Roles': [
      'User',
     'Admin'
    ]
    }";

    Account account = JsonConvert.DeserializeObject<Account>(json);

    Console.WriteLine(account.Email);

http://www.newtonsoft.com/json/help/html/deserializeobject.htm

【讨论】:

  • 谢谢阿米尔,但我一直在寻找并试图让它工作一整天,看看你发布的例子。这里有没有人可以提供一个代码示例来从我提供的 json 字符串中提取值?
  • @Craig json 不仅仅是您从中提取信息的花哨字符串 - 它是序列化数据。您要么需要将其反序列化为一个对象并获取 prop val,要么对其进行解析以提取出您想要的部分。
  • @Craig 我在我的答案中提供了完整的工作代码(见下面的答案)。而且我已经弄清楚了您的代码最初不起作用的地方。
猜你喜欢
  • 1970-01-01
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
相关资源
最近更新 更多