Синтаксический анализ Json со связанной хэш-картой java с использованием JsonPath - PullRequest
2 голосов
/ 15 апреля 2020

У меня есть json, который содержит связанную хэш-карту. Я могу получить элемент, который я хочу, используя gson, вот так

Gson gson = new GsonBuilder().create()

JsonObject job = gson.fromJson(message.getBody(), JsonObject.class)
JsonElement entry=job.getAsJsonObject("MessageAttributes").getAsJsonObject("eventId").get("Value")

Я хочу использовать JsonPath что-то вроде этого

JsonObject j = JsonPath.read(awsBody, "$['MessageAttributes']")
j.getAsJsonObject("eventId").get("Value")

хотя это дает мне ошибку No such instance method: 'com.google.gson.JsonObject java.util.LinkedHashMap.getAsJsonObject (java.lang.String)'

Вот мой json

{
    "MessageId": "8342fb55-9db8-42cb-8f59-c6abc8039b72",
    "Type": "Notification",
    "Timestamp": "2020-04-15T14:40:06.927960Z",
    "Message": "Some message here ",
    "TopicArn": "arn:aws:sns:us-east-1:000000000000:quote-event",
    "MessageAttributes": {
        "eventId": {
            "Type": "String",
            "Value": "HELLO-WORLDaaa-4bb04d9e-2522-4918-98c9-5a88094d3a3a"
        }
    }
}

Ответы [ 2 ]

1 голос
/ 15 апреля 2020
  1. JsonPath не работает напрямую с объектом GSON, поскольку он использует внутреннюю библиотеку net.minidev.json, поэтому сначала необходимо настроить JsonPath

  2. [] используется для выбора индексов, диапазона или условий, поэтому для доступа к объекту MessageAttributes используйте путь $.MessageAttributes.

Создайте объект конфигурации для GSON как

Configuration config = Configuration
    .builder()
    .jsonProvider(new GsonJsonProvider())
    .mappingProvider(new GsonMappingProvider())
    .build();

Теперь используйте конфигурацию при чтении объекта как:

JsonObject j = JsonPath.using(config).parse(awsBody)
        .read("$.MessageAttributes"); // path for MessageAttributes, is an elemnt from root

String value = j.getAsJsonObject("eventId").get("Value");
1 голос
/ 15 апреля 2020

Чтобы получить ключ value, это будет:

$['MessageAttributes']['eventId']['Value'] или $.MessageAttributes.eventId.Value

. Для тестирования и экспериментов используйте этот сайт . Также используйте этот , чтобы прочитать спецификацию jsonPath.

...