php - 如何在 VB.net 中转换 JSON 以便在 PHP 中使用
问题描述
我收到了一个将 JSON 字符串提交给 API 的 php 文件。但是,我正在使用的执行相同操作的应用程序在 VB.net 上运行。
我使用了一个 Dictionary 对象来重建 JSON 对象,但我在最终输出中发现了一些细微的差异。这是我的代码:
Dim data As New Dictionary(Of String, Object)
Dim AuthDetails As New Dictionary(Of String, Object)
AuthDetails.Add("UserID", 18)
AuthDetails.Add("Token", "One")
AuthDetails.Add("Timestamp", Date.Now().ToString("yyyyMMddhhmmss")
data.Add("AuthDetails", AuthDetails)
Dim JSONByte As Byte() = Encoding.Default.GetBytes(JsonConvert.SerializeObject(data, Formatting.Indented))
Dim JSONString As String = Encoding.ASCII.GetString(JSONByte).Replace(vbCrLf, "").Replace("""", """""")
我面临两个问题:
我在 JSONString 上添加了 2 个替换方法,因为在 VB.net 中,JSONString 会有换行符(格式很好)和一个“小于”,显然,PHP 给出了类似的结构。我认为我上面的代码是一个修复而不是约定。但到目前为止它工作正常,除非我弄清楚如何避免该修复!
主要问题是这是预期的 PHP JSON 字符串,它与我能够在 VB.net 中获得的内容有细微差别,如下所示:
PHP:
{""AuthDetails"":[{""UserID"":""18"",""Token"":""One"",""Timestamp"":""20190424132431""}]}
VB.net:
{ ""AuthDetails"": { ""UserID"": ""18"", ""Token"": ""One"", ""Timestamp"": ""20190424053345"" }}
因此,如果您仔细看,上面的 PHP 部分有一些方括号,而我在 VB.net 部分中缺少这些方括号。我知道这是定义数组的 PHP 方式,但我不知道如何在 VB.net 中使用我使用过的 Dictionary 对象来完成它。
请帮我找出我的 JSON 字符串的附加方括号。
修订:
我能够做到这一点:
{ ""AuthDetails"": [ { ""Key"": ""UserID"", ""Value"": ""1581"" }, { ""Key"": ""Token"", ""Value "": ""4f7bbcf97b4313f8353fa06c5e3a8fb6"" }, { ""Key"": ""Timestamp"", ""Value"": ""20190425052154"" } ]}
当我像这样将 Dictionary 对象转换为 Array 时:
data.Add("AuthDetails", AuthDetails.toArray())
但是现在将键名和值名引入字符串......,我不需要!
谢谢!
解决方案
谢谢你的意见!它加起来就是我现在想出的解决方案,如下所示:
Dim auth(0) As Object
auth(0) = AuthDetails
data.Add("AuthDetails", auth)
因此,我没有将 AuthDetails 添加到数据对象,而是先将其添加到定义的数组中(Tim Morton!)。
修订:(吉米)我将格式更改为Formatting.None
,它删除了换行符,还删除了添加额外双引号的需要!
[删除了之前关于 PHP 的评论]
推荐阅读
- reactjs - React Native Navigation 5 导入“元素类型无效”
- visual-studio-code - Gitlab,在降价中,我如何使用除标题之外的锚?
- javascript - 续集警告:`resolve/lib/core` 已弃用;请直接使用`is-core-module`
- mysql - Docker:将正在运行的容器公开给主机
- python - 使用熊猫格式化日期时间列
- laravel - 如何使用 Laravel 7 删除数据库中的数据记录
- python - ModuleNotFoundError:没有名为“官方”的模块
- xamarin - 点击并按住时轮播视图停止自动滚动 - Xamarin.forms
- jupyter-notebook - PyCaret - 如何在 Spyder 中获得与 Jupyter Notebook 类似的输出
- node.js - 属性“setComputed”在类型中是可选的......但在类型“EntityExample”中是必需的