Довольно распечатать строку в формате JSON - PullRequest
0 голосов
/ 08 ноября 2018

Я выполняю команду AWS для извлечения истории спотовых цен.

DescribeSpotPriceHistoryRequest request = new DescribeSpotPriceHistoryRequest().withEndTime(start)
        .withInstanceTypes("m1.xlarge").withProductDescriptions("Linux/UNIX (Amazon VPC)").withStartTime(end);
        DescribeSpotPriceHistoryResult response = client.describeSpotPriceHistory(request);
        System.out.println(response.toString());

Я получил результат в формате json, но получаю его в виде строки:

{SpotPriceHistory: [{AvailabilityZone: us-east-1d,InstanceType: m1.xlarge,ProductDescription: Linux/UNIX,SpotPrice: 0.035000,Timestamp: Wed Nov 07 00:18:50 CET 2018}, {AvailabilityZone: us-east-1c,InstanceType: m1.xlarge,ProductDescription: Linux/UNIX,SpotPrice: 0.035000,Timestamp: Wed Nov 07 00:18:50 CET 2018}, {AvailabilityZone: us-east-1b,InstanceType: m1.xlarge,ProductDescription: Linux/UNIX,SpotPrice: 0.035000,Timestamp: Wed Nov 07 00:18:50 CET 2018}, {AvailabilityZone: us-east-1a,InstanceType: m1.xlarge,ProductDescription: Linux/UNIX,SpotPrice: 0.035000,Timestamp: Wed Nov 07 00:18:50 CET 2018}, {AvailabilityZone: us-east-1e,InstanceType: m1.xlarge,ProductDescription: Linux/UNIX,SpotPrice: 0.350000,Timestamp: Thu Sep 20 01:08:39 CEST 2018}]}

мой вопросявляется: Как я могу улучшить отображение результатов?как

        {
            "Timestamp": "2018-09-08T17:07:14.000Z", 
            "AvailabilityZone": "us-east-1d", 
            "InstanceType": "p2.16xlarge", 
            "ProductDescription": "Linux/UNIX", 
            "SpotPrice": "4.320000"
        }, 
        {
            "Timestamp": "2018-09-08T17:07:14.000Z", 
            "AvailabilityZone": "us-east-1c", 
            "InstanceType": "p2.16xlarge", 
            "ProductDescription": "Linux/UNIX", 
            "SpotPrice": "4.320000"
        }, 
        {
            "Timestamp": "2018-09-08T17:07:14.000Z", 
            "AvailabilityZone": "us-east-1b", 
            "InstanceType": "p2.16xlarge", 
            "ProductDescription": "Linux/UNIX", 
            "SpotPrice": "4.320000"
        }, 
        {
            "Timestamp": "2018-09-08T12:32:28.000Z", 
            "AvailabilityZone": "us-east-1e", 
            "InstanceType": "p2.16xlarge", 
            "ProductDescription": "Linux/UNIX", 
            "SpotPrice": "4.320000"
        }
    ]
}

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Вы вызываете .toString() для объекта ответа, просто будьте осторожны с этим, поскольку нет гарантии, что всегда будет json, как вы видите выше, это даже не допустимый json, так как отсутствуют кавычки вокруг имена и значения атрибутов.

Один из способов получить то, что вы хотите, - это позвонить response.getSpotPriceHistory(), чтобы получить массив спотовых цен, затем передать его через ObjectMapper и записать в виде симпатичной строки, например:

public static void main(String[] args) throws IOException {

    AmazonEC2 client = AmazonEC2Client.builder().build();
    DescribeSpotPriceHistoryRequest request = new DescribeSpotPriceHistoryRequest()
        .withEndTime(new Date())
        .withInstanceTypes("m1.xlarge").withProductDescriptions("Linux/UNIX (Amazon VPC)")
        .withStartTime(new Date());
    DescribeSpotPriceHistoryResult response = client.describeSpotPriceHistory(request);

    ObjectMapper mapper = new ObjectMapper();
    String asPrettyJSon = mapper.writerWithDefaultPrettyPrinter()
        .writeValueAsString(response.getSpotPriceHistory());
    System.out.println(asPrettyJSon);
    }
0 голосов
/ 08 ноября 2018

Оба представляют массив json, содержащий jsonObjects одинаковой структуры. Результат будет зависеть от вашей фронтальной реализации, а не от макета вашего jsonRespense.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...