Как мне получить следующее значение из этого ответа JSON?

#json #powershell #amazon-dynamodb

#json #powershell #amazon-dynamodb

Вопрос:

В принципе, у меня есть извлеченные значения из DynamoDB с помощью Powershell, и я получил строку в формате JSON, например, следующую

       function gettagsfromdynamo() {
        $table_name = "table_name"
        $dbkey = '{"ReleaseId":{"AttributeValueList":[ {"N":"1"} ],"ComparisonOperator": "EQ"}}' | ConvertTo-Json -Compress
        $dbvalue = aws dynamodb query --table-name $table_name --key-conditions $dbkey --region $region
        $latest_tags = $dbvalue
        $latest_tags
      }
     
      $db_tags = gettagsfromdynamo
 

Вот как выглядит db_tags

 {
    "Items": [
        {
            "Comment": {
                "S": "The first PC release."
            },
            "Product": {
                "S": "PC"
            },
            "ReleaseId": {
                "N": "1"
            },
            "CreatedOn": {
                "S": "12/14/2020 15:23:32"
            },
            "Tags": {
                "S": "{n    "software1": "software1.zip",n    "software2": "software2.zip",n    "software3":n    [n        "software3.zip",n        "software4.zip",n        "software5.zip"n    ],n    " data1 ": "2020_NA",n    " 2020_EU ": "20201_EU",n    " 2020_WW ": "2021_WW",n    " dataversions":n    [n        "2020",n        "2019",n        "2018",n        "2017"n    ],n    " products ": " "n}"
            }
        }
    ],
    "Count": 1,
    "ScannedCount": 1,
    "ConsumedCapacity": null
}
 

Задача, которую я хочу достичь, состоит в том, чтобы иметь возможность получить значение «dataversions», которое является —> [Элементы] [Теги] [Версии данных] и записать это значение в файл JSON, доступный локально. Я пробовал разные вещи, включая использование Convert-toJSON и ConvertFrom-Json.

Значение json тегов выглядит следующим образом без экранированных пробелов (/n)

 {
    "software1": "software1.zip",
    "software2": "software2.zip",
    "software3":
    [
        "software3.zip",
        "software4.zip",
        "software5.zip"
    ],
    " data1": "2020_NA",
    " 2020_eu ": "2020_EU",
    " 2020_ww": "2021_WW",
    " dataversions":
    [
        "2020",
        "2019",
        "2018",
        "2017"
    ],
    " products ": " "
}
 

Как мне получить значение ‘dataversions’, которое представляет собой список строк. Прямо сейчас я могу получить его таким образом только после использования различных попыток:

 {"S":"{n    "software1": "software1.zip",n    "software2": "software2.zip",n    "software3":n    [n        "software3.zip",n        "software4.zip",n        "software5.zip"n    ],n    " data1": "2020_NA",n    " 2020_EU": "20201_EU",n    " 2020_WW": "2021_WW",n    " dataversions":n    [n        "2020",n        "2019",n        "2018",n        "2017"n    ],n    " products": " "n}"}

 

Я хочу иметь возможность получить значение dataversions для перезаписи другого «dataversions», который находится внутри файла example.json. Как мне получить значение dataversions, а также очистить n?

Комментарии:

1. Поскольку у вас есть начальный пробел " dataversions" , вам нужно будет использовать ($db_tags | convertfrom-json).' dataversions' .

2. Черт возьми. Я ненавижу, когда мне нужно много времени, чтобы разобраться в мелочах. Спасибо. Если вы хотите, ответьте на вопрос, и я могу проверить его как правильный ответ.

3. Я добавил ответ. Спасибо

Ответ №1:

В вашем файле JSON имя свойства " dataversions" содержит начальный пробел. Когда строка JSON преобразуется в пользовательский объект (через ConvertFrom-Json ), пробел будет включен в имя свойства. Поэтому это необходимо учитывать при использовании синтаксиса member access ( object.property ):

 ($db_tags | ConvertFrom-Json).' dataversions'