【问题标题】:Powershell and Nested JSON [duplicate]Powershell 和嵌套 JSON [重复]
【发布时间】:2020-03-13 14:14:56
【问题描述】:

我有以下 JSON

{
  "method": "exec",
  "params": [
    {
      "url": "/sys/login/user",
      "data": [
        {
          "user": "MyUsername",
          "passwd": "MyPassword"
        }
      ]
    }
  ],
  "id": 1,
  "ver": "2.0"
}

我正在尝试使用 Powershell 构建此 JSON,但输出不正确,下面是我的代码。

$fullJson=@{}
$params=@()
$paramsdata=@()
$paramsdata+=@{"user"="mailapi"}
$paramsdata+=@{"passwd"="**********"}
$params+=@{"url"="/sys/login/user"}
$params+=@{"data"=$paramsdata}
$fullJson.Add("method", "exec")
$fullJson.Add("params",$params)
$fullJson.Add("id", "1")
$fullJson.Add("ver", "2.0")
$JsonBody=$fullJson | ConvertTo-Json
$x=Invoke-WebRequest -Uri https://10.10.10.10/jsonrpc -Body $JsonBody -Method Post

输出如下

{
    "method":  "exec",
    "params":  [
                   {
                       "url":  "/sys/login/user"
                   },
                   {
                       "data":  "System.Collections.Hashtable System.Collections.Hashtable"
                   }
               ],
    "id":  "1",
    "ver":  "2.0"
}

问题是 DATA 属性格式不正确,它应该是第一个内的嵌套数组,但它似乎被添加为哈希表。

这个问题是数据数组应该像下面这样构建

"params": [
    {
      "url": "/sys/login/user",
      "data": [
        {
          "user": "MyUsername",
          "passwd": "MyPassword"
        }
      ]

但是使用我的代码,它是这样构建的

"params":  [
                   {
                       "url":  "/sys/login/user"
                   },
                   {
                       "data":  "System.Collections.Hashtable System.Collections.Hashtable"
                   }
               ],

任何帮助更新此内容。

谢谢

【问题讨论】:

    标签: arrays json powershell hashtable


    【解决方案1】:

    ConvertTo-Json 中使用-Depth option

    指定包含的对象的级别数 JSON 表示。默认值为 2。

    您想要的深度是 4(对象 -> 参数 -> 数据 -> 用户名/密码):

    $JsonBody=$fullJson | ConvertTo-Json -Depth 4
    

    【讨论】:

    • 代码应该像这样发送``` "params": [ { "url": "/sys/login/user", "data": [ { "user": "MyUsername" , "passwd": "MyPassword" } ] ``` 但是使用我的代码,它是这样构建的 `` "params": [ { "url": "/sys/login/user" }, { "data" : "System.Collections.Hashtable System.Collections.Hashtable" } ], ```
    • @FarisMlaeb 我误解了你的问题,现在我已经编辑了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2019-08-20
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2023-03-29
    • 2021-10-25
    相关资源
    最近更新 更多