concat Jolt работает над демоверсией сайта;не работает в коде - PullRequest
0 голосов
/ 04 ноября 2019

Я бы хотел объединить пару полей с помощью Jolt (com.bazaarvoice.jolt:jolt-core:0.1.1 и com.bazaarvoice.jolt:json-utils:0.1.1). Вот пример входной записи:

{
  "ts": 1572873208.555711,
  "uid": "CQXg712bv3ayjojRwd",
  "orig_lat": 39.997,
  "orig_long": -105.0974,
  "resp_lat": 39.0481,
  "resp_long": -77.4728
}

... и это преобразование Джолта:

[
  {
    "operation": "modify-default-beta",
    "spec": {
      "orig_location": "=concat(@(1,orig_lat),',',@(1,orig_long))",
      "resp_location": "=concat(@(1,resp_lat),',',@(1,resp_long))"
    }
  }
]

... и это вывод преобразования из Демонстрационный сайт Jolt Transform :

{
  "ts" : 1.572873208555711E9,
  "uid" : "CQXg712bv3ayjojRwd",
  "orig_lat" : 39.997,
  "orig_long" : -105.0974,
  "resp_lat" : 39.0481,
  "resp_long" : -77.4728,
  "orig_location" : "39.997,-105.0974",
  "resp_location" : "39.0481,-77.4728"
}

Я пытался сделать это программно:

String input = "{\"ts\":1572873208.555711,\"uid\":\"CQXg712bv3ayjojRwd\",\"orig_lat\":39.997,\"orig_long\":-105.0974,\"resp_lat\":39.0481,\"resp_long\":-77.4728}";

String JOLT_SPEC_LIST = "[\n" +
        "  {\n" +
        "    \"operation\": \"modify-default-beta\",\n" +
        "    \"spec\": {\n" +
        "      \"orig_location\": \"=concat(@(1,orig_lat),',',@(1,orig_long))\",\n" +
        "      \"resp_location\": \"=concat(@(1,resp_lat),',',@(1,resp_long))\"\n" +
        "    }\n" +
        "  }\n" +
        "]";

Chainr chainr = Chainr.fromSpec(JsonUtils.jsonToList(JOLT_SPEC_LIST));
Object transformed = chainr.transform(input);

Объект transformed должен содержать преобразованный вывод. По какой-то причине вывод идентичен вводу. Он не содержит двух производных полей.

Вы видите, что я делаю неправильно?

1 Ответ

1 голос
/ 04 ноября 2019

Я ошибочно передал строку в метод transform. Это должен был быть Object.

. Я преобразовал строку в объект, используя Джексона:

ObjectMapper mapper = new ObjectMapper();
Object inputObject = mapper.readValue(input, Object.class);

..., а затем передал этот объект в метод Chainr.transform().

...