Как перебрать массив примитивов в JSONata

Я хотел бы знать, как перебирать массив примитивов, таких как массив int, или это простой массив строк.

{
   "printers":[
      "HP-1234",
      "HP-Inkjet"
   ]
}

Я хотел бы перебрать массив и сделать что-то вроде этого:

for( String obj:printers) {
    if(obj.contains("HP")) {
        //do something here
    }
}

Как я могу сделать это с помощью JSONata?

Любая помощь будет оценена!


person user1477232    schedule 24.01.2018    source источник
comment
Каков точный тип данных printers? org.json.JSONArray? javax.json.JsonArray? Что-то другое?   -  person mingos    schedule 25.01.2018
comment
принтеры будут org.json.JSONArray   -  person user1477232    schedule 25.01.2018
comment
Вы видели это? stackoverflow.com/questions/4784874 /   -  person mingos    schedule 25.01.2018
comment
Я хотел бы повторить его через JSONata, поскольку я использую jsonata.js для запроса сценариев json.   -  person user1477232    schedule 25.01.2018


Ответы (1)


Я понял решение, которое выглядит следующим образом:

$map(printers, function($v, $i, $a) {
    $v~>$string()~>$contains("HP")?"HP Priter":$v
})

Но поскольку я вызываю jasonata.js через Nashorn с помощью java, я не могу получить правильный результат.

Вот что я сделал:

        Object resultjson = inv.invokeMethod(expr, "evaluate", inputjson);        
        engine.put("resultjson", resultjson);
        Object result = engine.eval("JSON.stringify(resultjson);");
        System.out.println("Result:" + result);

Вывод, который я получаю: Результат: [object Object] Поиск указателей для получения результата в формате json.

Примечание. Я использую jsonata-es5.js, поскольку он совместим с Nashorn.

person user1477232    schedule 25.01.2018
comment
Выражение printers.($contains("HP") ? "HP-Printer" : $) сделает то же самое. Обратите внимание, что оператор точка . является неявной функцией отображения. - person Andrew Coleman; 25.01.2018
comment
Большое спасибо Андрей! Это помогает. У меня есть вопрос. Не на этом выражении, а на другом выражении. Можно ли преобразовать строку с числом в число с помощью JSONata? Для этого JSONprinterId:0000, когда я пытаюсь использовать принтерId~›$number(), я не могу преобразовать значение в число. Я понимаю, что это потому, что я пытаюсь преобразовать строку в число, но если я хочу это сделать, возможно ли это? - person user1477232; 26.01.2018
comment
Ах да, $number() не терпит ведущие нули. Поднимите вопрос на GitHub — это почти наверняка можно исправить. - person Andrew Coleman; 26.01.2018