json - 无法为嵌套属性添加值

标签 json powershell

我正在努力修改深度嵌套在 PSObject 中的属性数据。如果我尝试修改这些值,Powershell 只会抛出异常,指出它找不到该值,但如果我只是调用该值本身,就可以毫无问题地找到它。

json对象的原始数据如下所示:

[
    {
        "@CREATED": "2017-05-04 08:36:23",
        "@LAST_MODIFIED": "2017-05-08 08:18:58",
        "STANDARD_FIELDS": {
            "FIRST_NAME": {
                "@FIELD_ID": 2,
                "@LAST_MODIFIED": "2017-05-04 08:36:24",
                "@VALID_FROM": "2017-05-04",
                "value": "Example"
            },
            "LAST_NAME": {
                "@FIELD_ID": 3,
                "@LAST_MODIFIED": "2017-05-04 08:36:24",
                "@VALID_FROM": "2017-05-04",
                "value": "User"
            },
            "ORGANIZATION": {
                "@FIELD_ID": 8,
                "@MODE": 0,
                "@LAST_MODIFIED": "2017-05-04 08:36:24",
                "@VALID_FROM": "2017-05-04",
                "value": "Example Org"
            },
            "NAME": {
                "@FIELD_ID": 1,
                "@MODE": 1,
                "@LAST_MODIFIED": "2017-05-04 08:36:24",
                "@VALID_FROM": "2017-05-04",
                "@ID": 240
            },
            "SUPERVISOR": {
                "@FIELD_ID": 9,
                "@MODE": 4,
                "@LAST_MODIFIED": "2017-05-04 15:39:30",
                "@VALID_FROM": "2017-05-04",
                "NAME": "Example User2",
                "SYSTEM_ID": "198"
            },
            "JOB_LOCATION": {
                "@FIELD_ID": 14,
                "@MODE": 0,
                "@LAST_MODIFIED": "2017-05-04 14:26:55",
                "@VALID_FROM": "2017-05-04",
                "value": "Stockholm"
            }
        },
        "CUSTOM_FIELDS": {
            "FIELD": [
                {
                    "@FIELD_ID": 1033,
                    "@MODE": 0,
                    "@LAST_MODIFIED": "2017-05-24 10:15:24",
                    "@VALID_FROM": "2017-05-24",
                    "NAME": "Department",
                    "VALUE": {
                        "value": "Example Department"
                    }
                },
                {
                    "@FIELD_ID": 1034,
                    "@MODE": 0,
                    "@LAST_MODIFIED": "2017-05-04 08:36:24",
                    "@VALID_FROM": "2017-05-04",
                    "NAME": "VPN",
                    "VALUE": {
                        "value": "Yes"
                    }
                },
                {
                    "@FIELD_ID": 1036,
                    "@LAST_MODIFIED": "2017-05-04 08:36:24",
                    "@VALID_FROM": "2017-05-04",
                    "NAME": "Titel",
                    "VALUE": {
                        "value": "Test-User"
                    }
                },
                {
                    "@FIELD_ID": 1022,
                    "@MODE": 0,
                    "@LAST_MODIFIED": "2017-05-04 16:43:18",
                    "@VALID_FROM": "2017-05-04",
                    "NAME": "Authorizations",
                    "VALUES": {
                        "VALUE": [
                            {
                                "value": "Auth 1"
                            },
                            {
                                "value": "Auth 2"
                            },
                            {
                                "value": "Auth 3"
                            },
                            {
                                "value": "Auth 4"
                            }
                        ]
                    }
                }
            ]
        }
    }
]

我当前的代码:

$users = get-content "C:\Working-Branch\Temp\NotFoundUsers - Copy.txt"| ConvertFrom-Json



foreach($user in $users){
  $user.CUSTOM_FIELDS.FIELD.values.Value.value
  $NewValue = $user.CUSTOM_FIELDS.FIELD.values.Value.value
  $NewValue += "Test"
  $NewValue
  $($user.CUSTOM_FIELDS.FIELD.values.Value).value = $newValue
}

这会产生以下输出:

Auth 1
Auth 2
Auth 3
Auth 4
Auth 1
Auth 2
Auth 3
Auth 4
Test
The property 'value' cannot be found on this object. Verify that the property exists and can be set.
At line:10 char:5
+   $($user.CUSTOM_FIELDS.FIELD.values.Value).value = $newValue
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyAssignmentException

所以我知道该属性存在,因为我调用它两次,一次直接在对象上调用,一次在我向其添加值“test”之后调用。但是当我尝试更新 Orignal 对象时,它说无法在对象上找到值“Value”。

我尝试按照This post中的建议进行操作,但对我来说仍然失败。我同时使用“+=”运算符和“=”运算符。两者都出现同样的错误。

Result of Get-member

最佳答案

我认为您需要找到包含成员Values的字段

$newvalue =@{
    "value" = "Test"
    }

foreach($user in $users){

  $array = $user.CUSTOM_FIELDS.FIELD.values.value
  $array += $newvalue

  foreach ($field in $user.CUSTOM_FIELDS.FIELD)
  {
    if ($field.values -ne $null)
    {
        $field.values.value = $array
    }
  }

  $user.CUSTOM_FIELDS.FIELD.values.Value
}

然后 $user.CUSTOM_FIELDS.FIELD.values.Value 的输出为

value 
----- 
Auth 1
Auth 2
Auth 3
Auth 4
Test  

关于json - 无法为嵌套属性添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44365439/

相关文章:

javascript - 通过将包添加到 Node 包管理器 package.json 文件来安装包?

powershell - 使用 PowerShell 授予 IIS 7.5 应用程序池读取证书私钥的权限

powershell - 如何找到 msi 是否有时间戳?

json - 如何在 Angular 中基于外部 NgFor 建立内部 NgFor

javascript - 修改数据时setState不会触发重新渲染

json - Flutter:将JSON文件的特定字段结合在一起,成为列表本身

function - 如何以编程方式确定函数参数的默认值?

powershell - 从文件名中删除无关的字符

powershell - Azure ARM 模板部署是事务性的吗?

javascript - 如何将对象 JSON 转换为 d3.js 数组数据