正在 VB.NET 中解析 JSON
Parsing JSON in VB.NET
我正在尝试解析 JSON
中返回的以下数据
{
"Id":8151302,
"Status":"Accepted",
"Response":"0",
"Price":"0.88",
"Detail":"https://api.test.com/Redirect/Index 3eae1b02"
}
这是我尝试使用的:
sresult = sresult.Replace("""""", String.Empty)
If sresult.Contains("Status"":""Accepted") Then
Dim parts = sresult.Replace("{", String.Empty).Replace("}", String.Empty).Split(",")
For i As Int16 = 0 To parts.Length - 1
If parts(i).StartsWith("Detail"":") Then
app.Outcome.RedirectURL = parts(i).Substring(12)
End If
If parts(i).StartsWith("Price"":") Then
lendertier.LenderComm = CDec(parts(i).Substring(11))
End If
If parts(i).StartsWith("Id") Then
app.Outcome.LenderReference = parts(i).Substring(15)
End If
Next
AcceptLead()
Return True
我解析后得到的返回结果是
URL:
REF:
PRICE:£0.00
应该是:
URL: https://api.test.com/Redirect/Index 3eae1b02
ID: 8151302
PRICE: 0.88
我也试过反序列化它。我得到相同的结果:
Dim sReason As String = "Unknown"
Dim JSON As JavaScriptSerializer = New JavaScriptSerializer()
Dim SH As SandhurstData = JSON.Deserialize(Of SandhurstData)(sResult)
If SH.Status = "Accepted" Then
app.Outcome.RedirectURL = SH.RedirectURL
app.Outcome.LenderReference = SH.ApplicationRef
lendertier.LenderComm = SH.Commission
AcceptLead()
Return True
End If
sReason = SH.Reason
If Not SH.ValidationErrors Is Nothing Then
If (SH.ValidationErrors.Count > 0) Then
For Each e As String In SH.ValidationErrors
sReason &= e + "; "
Next
End If
End If
DeclineLead(sReason.Trim())
Return False
End Function
<Serializable> _
Public Class SandhurstData
Public Property Status() As String
Public Property RedirectURL() As String
Public Property Commission() As Decimal
Public Property ApplicationRef As String
Public Property ValidationErrors As List(Of String)
Public Property Reason As String
End Class
如评论所述,JSON.NET 是必经之路。超级简单:
Public Sub Main()
Dim json as String = "{'Id':'8151302', 'Status':'Accepted', 'Response':'0', 'Price':'0.88', 'Detail':'https://api.test.com/Redirect/Index 3eae1b02'}"
Dim deserialized = JsonConvert.DeserializeObject(of SandhurstData)(json)
Console.WriteLine(deserialized)
End Sub
Public Class SandhurstData
Public Id as String
Public Status as String
Public Response as String
Public Price as Double
Public Detail as String
Public Overrides Function ToString() as String
return String.Format("Id: {1} {0}Status: {2} {0}Response: {3} {0}Price: {4} {0}Detail: {5}", Environment.NewLine, Id, Status, Response, Price, Detail)
End Function
End Class
如果 DeserializeObject
方法抛出错误,可能是因为您的 JSON 无效或与目标对象不匹配。
示例 fiddle:here
我正在尝试解析 JSON
中返回的以下数据{
"Id":8151302,
"Status":"Accepted",
"Response":"0",
"Price":"0.88",
"Detail":"https://api.test.com/Redirect/Index 3eae1b02"
}
这是我尝试使用的:
sresult = sresult.Replace("""""", String.Empty)
If sresult.Contains("Status"":""Accepted") Then
Dim parts = sresult.Replace("{", String.Empty).Replace("}", String.Empty).Split(",")
For i As Int16 = 0 To parts.Length - 1
If parts(i).StartsWith("Detail"":") Then
app.Outcome.RedirectURL = parts(i).Substring(12)
End If
If parts(i).StartsWith("Price"":") Then
lendertier.LenderComm = CDec(parts(i).Substring(11))
End If
If parts(i).StartsWith("Id") Then
app.Outcome.LenderReference = parts(i).Substring(15)
End If
Next
AcceptLead()
Return True
我解析后得到的返回结果是
URL:
REF:
PRICE:£0.00
应该是:
URL: https://api.test.com/Redirect/Index 3eae1b02
ID: 8151302
PRICE: 0.88
我也试过反序列化它。我得到相同的结果:
Dim sReason As String = "Unknown"
Dim JSON As JavaScriptSerializer = New JavaScriptSerializer()
Dim SH As SandhurstData = JSON.Deserialize(Of SandhurstData)(sResult)
If SH.Status = "Accepted" Then
app.Outcome.RedirectURL = SH.RedirectURL
app.Outcome.LenderReference = SH.ApplicationRef
lendertier.LenderComm = SH.Commission
AcceptLead()
Return True
End If
sReason = SH.Reason
If Not SH.ValidationErrors Is Nothing Then
If (SH.ValidationErrors.Count > 0) Then
For Each e As String In SH.ValidationErrors
sReason &= e + "; "
Next
End If
End If
DeclineLead(sReason.Trim())
Return False
End Function
<Serializable> _
Public Class SandhurstData
Public Property Status() As String
Public Property RedirectURL() As String
Public Property Commission() As Decimal
Public Property ApplicationRef As String
Public Property ValidationErrors As List(Of String)
Public Property Reason As String
End Class
如评论所述,JSON.NET 是必经之路。超级简单:
Public Sub Main()
Dim json as String = "{'Id':'8151302', 'Status':'Accepted', 'Response':'0', 'Price':'0.88', 'Detail':'https://api.test.com/Redirect/Index 3eae1b02'}"
Dim deserialized = JsonConvert.DeserializeObject(of SandhurstData)(json)
Console.WriteLine(deserialized)
End Sub
Public Class SandhurstData
Public Id as String
Public Status as String
Public Response as String
Public Price as Double
Public Detail as String
Public Overrides Function ToString() as String
return String.Format("Id: {1} {0}Status: {2} {0}Response: {3} {0}Price: {4} {0}Detail: {5}", Environment.NewLine, Id, Status, Response, Price, Detail)
End Function
End Class
如果 DeserializeObject
方法抛出错误,可能是因为您的 JSON 无效或与目标对象不匹配。
示例 fiddle:here