Анализ 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 в наших ярлыках.

Если вы нашли эту запись в блоге полезной, вам понравится книга, наполненная множеством реальных примеров и интеграцией искусственного интеллекта — погрузитесь глубже в ярлыки.

Больше идей и уроков вы можете найти здесь.