Как избежать амперсанда в вызове API Socrata SODA 2?

Я работаю с набором данных о преступности в Нью-Йорке и я замечаю, что тип offense для убийств - это MURDER & NON-NEGL. MANSLAUGHTE. (Да, это «ручная охота» без «r».) Однако, когда я пытаюсь отфильтровать это с помощью SODA API, я получаю ошибки:

https://data.cityofnewyork.us/resource/hyij-8hr7.json?$where=offense='MURDER & NON-NEGL. MANSLAUGHTE'

{ "ошибка" : истина, "сообщение" : "Нераспознанные аргументы [НЕ NEGL. MANSLAUGHTE']" }

Мне кажется, что амперсанд в строке убегает.

Обратите внимание, что я пытался использовать команду like=‘MURDER’, чтобы не вводить амперсанд, например, запрос https://data.cityofnewyork.us/resource/hyij-8hr7.json?$where=offense like 'MURDER', но это дает мне ошибку

{ "error" : true, "message" : "Ошибка: функция #LIKE не определена в SoQL.: Ошибка: функция #LIKE не определена в SoQL." }

Это должно означать, что набор данных NYC использует SoQL. v. 2.0, а не 2.1.

Итак, в заключение, как я могу запросить убийства? Есть ли способ либо (а) правильно экранировать амперсанд, либо (б) искать подстроки?

Спасибо за любую помощь по любому из этих запросов.


person isthmuses    schedule 25.09.2016    source источник


Ответы (1)


Вы правы, hyij-8hr7 — это конечная точка SODA 2.0 для этого набора данных. Однако также существует конечная точка версии 2.1: https://dev.socrata.com/foundry/data.cityofnewyork.us/e4qk-cpnv

Используя конечную точку версии 2.1, вы можете экранировать амперсанд как URL-кодировку %26: $where=offense='MURDER %26 NON-NEGL. MANSLAUGHTE'. Полный URL, полностью экранированный:

GET https://data.cityofnewyork.us/resource/e4qk-cpnv.json?$where=offense%3D%27MURDER%20%26%20NON-NEGL.%20MANSLAUGHTE%27

В конечной точке 2.1 вы также можете использовать LIKE для поиска подстрок в стиле SQL. или $q для использования индекса полнотекстового поиска.

person chrismetcalf    schedule 26.09.2016