首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PowerShell JSON设置值

PowerShell JSON设置值
EN

Stack Overflow用户
提问于 2020-11-16 03:14:37
回答 2查看 197关注 0票数 1

朋友们,我确实在PowerShell中运行了一些ReST api调用,并且确实得到了一个

代码语言:javascript
复制
$response

page                                                content
----                                                -------
@{size=20; number=0; totalPages=1; totalElements=1} {@{id=ZGR2ZS0yLnZsYWIubG9j…

当我转换为JSON时

PS C:\Users\Administrator\Documents> $response |转换为Json

代码语言:javascript
复制
{
  "page": {
    "size": 20,
    "number": 0,
    "totalPages": 1,
    "totalElements": 1
  },
  "content": [
    {
      "id": "ZGR2ZS0yLnZsYWIubG9jYWw6MzAwOTpob3N0",
      "host": "ddve-2.vlab.local",
      "port": "3009",
      "notValidBefore": "Fri Mar 29 21:32:19 PDT 2019",
      "notValidAfter": "Sat Mar 29 04:32:19 PDT 2025",
      "fingerprint": "E1BB40B0284595297071177FE02BC9C76E85CD66",
      "subjectName": "CN=ddve-2.vlab.local, O=Valued DataDomain customer, OU=Hos
t Certificate, ST=CA, C=US",
      "issuerName": "CN=ddve-2.vlab.local, OU=Root CA, O=Valued Datadomain Custo
mer, L=Santa Clara, ST=CA, C=US",
      "state": "ACCEPTED",
      "type": "HOST"
    }
  ]
}
代码语言:javascript
复制
an idividual value can be seen

PS C:\Users\Administrator\Documents> $response.content.state
ACCEPTED

但是设置新值失败。

代码语言:javascript
复制
PS C:\Users\Administrator\Documents> $response.content.state = 123
InvalidOperation: The property 'state' cannot be found on this object. Verify th
at the property exists and can be set.
EN

回答 2

Stack Overflow用户

发布于 2020-11-16 04:54:17

因为您的content .state 属性是一个(单元素)数组(其值包含在JSON表示中的[ ... ]中就可以证明这一点),您必须使用索引E213>E114来指定哪个元素的e215.state属性为。

代码语言:javascript
复制
$response.content[0].state = 123

请注意,获取值不需要索引(即$response.content.state工作并返回"ACCEPTED",正如您所说的那样),因为PowerShell随后应用member enumeration,这意味着它枚举数组中所有元素的<>d35>属性值(对于单元素数组,它只返回单个元素的值,而对于多元素数组,它返回一个值数组)。

On setting a property value,member enumeration is by design not supported,尽管错误消息肯定会更有帮助-请参阅this answer

票数 3
EN

Stack Overflow用户

发布于 2020-11-16 04:47:09

您的对象是一个PSCustomObject,而您试图更改的值是该对象上的一个NoteProperty,您可以使用带有-Force开关的Add-Member来覆盖它。

代码语言:javascript
复制
$Response = @"
{
  "page": {
    "size": 20,
    "number": 0,
    "totalPages": 1,
    "totalElements": 1
  },
  "content": [
    {
      "id": "ZGR2ZS0yLnZsYWIubG9jYWw6MzAwOTpob3N0",
      "host": "ddve-2.vlab.local",
      "port": "3009",
      "notValidBefore": "Fri Mar 29 21:32:19 PDT 2019",
      "notValidAfter": "Sat Mar 29 04:32:19 PDT 2025",
      "fingerprint": "E1BB40B0284595297071177FE02BC9C76E85CD66",
      "subjectName": "CN=ddve-2.vlab.local, O=Valued DataDomain customer, OU=Hos
t Certificate, ST=CA, C=US",
      "issuerName": "CN=ddve-2.vlab.local, OU=Root CA, O=Valued Datadomain Custo
mer, L=Santa Clara, ST=CA, C=US",
      "state": "ACCEPTED",
      "type": "HOST"
    }
  ]
}
"@ | ConvertFrom-Json

$Response.Content.State
$Response.Content | Add-Member -MemberType NoteProperty -Name State -Value 123 -Force
$Response.Content.State

输出

代码语言:javascript
复制
ACCEPTED
123
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64848746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档