Анализ JSON с помощью стандартных действий быстрого доступа macOS может быть очень сложным, особенно если JSON сложный или вам нужно найти или отфильтровать определенные свойства. Вооружившись некоторыми простыми знаниями о javascript, вы можете сделать это очень простым упражнением.
Пусть javascript вас не пугает, вы скоро узнаете, насколько простым может быть анализ сложных структур данных.
В предыдущем сообщении о синтаксическом анализе JSON Monsieurdindonспрашивал, как можно извлечь определенную информацию из набора данных о населении. Ответ: да, это возможно, но ответ, который я придумал, был довольно сложным и соответствовал этому набору данных. Ответ на вопрос с использованием стандартных действий на самом деле не поможет ответить на вопрос таким образом, чтобы мы все могли учиться и легко применять его в других ситуациях.
Итак, после небольшого исследования и пробной ошибки этот пост продемонстрирует самый простой способ решения более сложных задач при синтаксическом анализе JSON.
Краткий обзор — проблема
Этот URL, https://datausa.io/api/data?drilldowns=Nation&measures=Population, предоставляет следующую структуру данных о населении.
{ “data”: [{ “ID Nation”: “01000US”, “Nation”: “United States”, “ID Year”: 2019, “Year”: “2019”, “Population”: 328239523, “Slug Nation”: “united-states” }, { “ID Nation”: “01000US”, “Nation”: “United States”, “ID Year”: 2018, “Year”: “2018”, “Population”: 327167439, “Slug Nation”: “united-states” } …. ] }
Если бы мы хотели извлечь население за определенный год, наш ярлык выглядел бы примерно так…
Давайте посмотрим, сможем ли мы сделать этот сложный 20-шаговый ярлык немного проще. Bдважды, когда мы добавим javascript, нам потребуется всего 8 гораздо более простых шагов 😎.
Запустить действие Javascript
Ярлыки поставляются с действием под названием Run Javascript on Active Safari Tab
. Это действие немного отличается от всех остальных и сначала требует, чтобы Safari был настроен определенным образом.
Настраивать
Откройте приложение Safari и выберите Настройки в строке меню. Перейдите к Advanced
и выберите Show Develop menu in menu bar
.
Затем, вернувшись в строку меню Safari, вы должны увидеть новую опцию под названием Develop
, выберите ее, а затем Allow Javascript from Apple Events
.
Хорошо, теперь вы все настроены.
Javascript (JS) + JSON
Следующая задача — немного узнать о Javascript (JS) и JSON.
На этом этапе мы могли бы сразу перейти к JS, но в этом посте я буду максимально краток. Если вы хотите узнать больше о JS, добавьте комментарий к этому сообщению, и я дам дополнительную информацию.
Если данные JSON представлены в виде массива, например []
, и мы хотим получить доступ к первому элементу в этом списке, тогда в JS это выглядит как data[0]
, а >второй элемент в списке будет data[1]
и т. д. и т. д.
Если мы хотим запустить каждый элемент в массиве, это будет выглядеть примерно так:
for (let i = 0; i < json.length; i++) { // this line of code gets called for each item in the list // so the first time i=0, then i=1, i=2 etc until i is end of list }
Если данные JSON представлены в виде словаря, например {"ID Year": 2019}
, если мы хотим получить доступ к значению2019
, мы делаем это с помощью data["ID Year"]
.
Объединив это с нашей структурой данных о населении выше. Он начинается с {"data": [{
, который представляет собой словарь с «данными», где «данные» — это массив словарей. Таким образом, чтобы перебрать все значения, чтобы найти «год ID», равный 2014, и найти население, это будет выглядеть примерно так…
for (let i = 0; i < json["data"].length; i++) { if (json.data[i]["ID Year"] === 2014) { // population equals json.data[i]["Population"] } }
Действие ответ
Чтобы действие JS возвращало значение в ярлыке, вам нужно закончить JS с помощью completion(x)
, где x — это значение, которое вы хотите вернуть.
Окончательный ярлык
Быстрый прогон, нам нужен короткий путь к…
- Запросите у пользователя год, чтобы вернуть население за этот год.
- Получите содержимое URL-адреса в формате JSON.
- Используйте JS для запуска JSON, чтобы найти год, указанный на первом шаге, и получить доступ к значению
Population
. - Если популяция найдена, отобразите значение, в противном случае отобразите предупреждение, информирующее пользователя о том, что данные не могут быть найдены.
Надеюсь, это поможет увидеть, как Javascript дает нам возможность значительно упростить действия, необходимые для извлечения специальных данных JSON в наших ярлыках.
Больше идей и уроков вы можете найти здесь.