VB 变量 JSON 字符串

VB Variable JSON String

在 Visual Basic 代码中,当我尝试将变量插入此 JSON 字符串时,它返回 作为 400 错误请求。我如何正确地为这个 JSON 字符串提供一个变量?

Dim myJSON As String = "{""StoreId"":""12345"",""TerminalId"":""12345"",""CaptureMode"":""true"",""MerchantReferenceCode"":""VARIABLEINSERTEDHERE"",""InvoiceNumber"":""12345"",""TimeoutMinutes"":""5"",""ShowAddress"":""true"",""AddressRequired"":""true"",""TransactionTotal"":""33.33"",""TaxTotal"":""2.00"",""CustomerCode"":""12345""}"

你的 JSON 现在是一个看起来像这样的对象:

{
  "StoreId": "12345",
  "TerminalId": "12345",
  "CaptureMode": "true",
  "MerchantReferenceCode": "VARIABLEINSERTEDHERE",
  "InvoiceNumber": "12345",
  "TimeoutMinutes": "5",
  "ShowAddress": "true",
  "AddressRequired": "true",
  "TransactionTotal": "33.33",
  "TaxTotal": "2.00",
  "CustomerCode": "12345"
}

您的一个选择是创建一个新的 JObject,使用 Add 方法 (documentation) to build the object's properties, and then the ToString method (documentation) 将该对象序列化为 JSON。这样您就不必担心如何正确格式化 JSON,只需让库为您完成即可。

看看这个例子:

Dim myVariable = "VARIABLEINSTEREDHERE"
Dim request = New JObject()
request.Add("StoreId", 12345)
request.Add("TerminalId", 12345)
request.Add("CaptureMode", True)
request.Add("MerchantReferenceCode", myVariable)
request.Add("InvoiceNumber", 12345)
request.Add("TimeoutMinutes", 5)
request.Add("ShowAddress", True)
request.Add("AddressRequired", True)
request.Add("TransactionTotal", 33.33)
request.Add("TaxTotal", 2.00) ' taxation is theft
request.Add("CustomerCode", 12345)

Dim myJson = request.ToString()

示例:https://dotnetfiddle.net/FQDpVq

您所提问题的简短回答:

myjson = myjson.replace("VALUEPLACEHOLDER1","SoMeTHiNGeLSe")

现在,如果您正在谈论棘手的模式匹配,那么如果您想从字符串操作的角度来解决这个问题,您将需要使用正则表达式。不过,这会让你在路上遇到各种意想不到的问题,因为你没有预料到,如果你拥抱使用 JSON,你可能会在长期 运行 中更快乐。

尝试使用 NewtonSoft JSON 库。然后你可以这样做:

dim myobj as new MyClass
myobj = jsonconvert.deserializeobject(of MyClass)(myjson)

这会将您的 JSON 字符串变成一个名为 myobj 的 MyClass 实例,您可以直接访问它的属性,随意更改:

myobj.MerchantReferenceCode = "SpecialMerchant"

请注意,如果 MyClass 的 class 定义具有 JSON 没有值的属性,它们将出现在没有值的新 class 实例中。然后您可以根据需要设置这些值。

如果 JSON 具有您的 class 中不存在的属性,它们将在转换中 dropped/lost,因此您需要研究您的源数据。

然后您可以轻松地将其重新转换为字符串:

dim newjson as string = jsonconvert.serializeobject(myobj)