Arhn - архитектура программирования

Как получить данные из файла JSON (filename.json) с помощью функций Azure и C #

Я только что создал функцию Azure, которая должна запускаться хранилищем BLOB-объектов Azure (всякий раз, когда создается новый BLOB-объект), я хочу иметь свой код функции, чтобы он анализировал содержимое файла Json (filename.json), который является в формате JSON и использует содержимое файла для обновления содержимого базы данных, содержимое файлов выглядит следующим образом:

{
    "ID": "58",
    "Symbol": "J500",
    "Content": 
      [
        {"Date": "2017-05-15", "Value": "100000"}, 
        {"Date": "2017-05-16", "Value": "200"},
        {"Date": "2017-05-17", "Value": "90000"},
        {"Date": "2017-05-18", "Value": "80000"},
        {"Date": "2017-05-19", "Value": "70000}
      ]
}

Раньше я почти никогда не писал код на C # и думал, что смогу использовать для этого python, но оказалось, что я ограничен C #, любая помощь с подробным описанием и объяснением будет принята с благодарностью.

Я также довольно новичок в Azure, поэтому, если у кого-то есть лучшее предложение о том, как достичь того, что я пытаюсь сделать (например, используя другой триггер или другие связыватели или даже используя другую службу, а не функции), я открыт для предложений и был бы с радостью признателен. В настоящее время у меня есть только код по умолчанию:

public static void Run(Stream myBlob, string name, TraceWriter log)
{
    log.Info($"C# Blob trigger function Processed blob\n Name:{name}" \n Size: {myBlob.Length} Bytes");
}

Также в качестве примечания, я не могу видеть свои журналы, пока не перейду на экран монитора, любая помощь с этим также будет очень признательна.

Спасибо!


Ответы:


1

Во-первых, есть ли причина, по которой вы не можете использовать Python? Для функций это «экспериментально», но в основном из соображений производительности. Он должен уметь выполнять свою работу.

Не существует шаблона Python для больших двоичных объектов, но если вы создаете шаблон QueueTrigger, вы можете отредактировать созданные скрипты function.json и python, чтобы заставить его работать.

function.json:

{
  "bindings": [
    {
      "name": "input",
      "type": "blobTrigger",
      "direction": "in",
      "path": "samples-python/{fileName}",
      "connection": "AzureWebJobsStorage"
    }
  ],
  "disabled": false
}

run.py

import os

# read the blob contents and write to stdout
inputMessage = open(os.environ['input']).read()
message = "Python script processed blob '{0}'".format(inputMessage)
print(message)

Для C # это довольно широкий вопрос, но я могу указать вам в правильном направлении.

Во-первых, вы можете работать с JSON в .NET, используя Json.NET: http://www.newtonsoft.com/json. Поддержка встроена в функции Azure, поэтому с помощью этого кода вы можете преобразовать текст большого двоичного объекта в JObject (тип Json.NET), а затем зарегистрировать его:

#r "Newtonsoft.Json"

using Newtonsoft.Json.Linq;

public static void Run(string myBlob, string name, TraceWriter log)
{
    JObject json = JObject.Parse(myBlob);
    log.Info(json.ToString());
}

Оттуда вам нужно будет поместить его в базу данных. Если вы используете SQL, здесь есть хорошее руководство по настройке функций с SqlClient: https://docs.microsoft.com/en-us/azure/azure-functions/functions-scenario-database-table-cleanup.

После того, как у вас есть SqlClient, нужно взять ваш JObject и превратить его в записи Sql. Вот простой пример вставки: C # - SQLClient - Simplest INSERT

19.06.2017
  • Спасибо за ваш ответ. В ответ на то, почему я не могу использовать python, в списке возможных триггеров для триггера хранилища BLOB-объектов для python нет варианта, только один для C # и F #. Кроме того, мне все еще не удалось заставить этот фрагмент кода работать, так как я все еще получаю ошибку компиляции, которая, как я считаю, вызвана использованием Newtonsoft.Json, мне нужно делать какие-либо импортные операции, чтобы иметь возможность использовать методы, которые он предоставляет, потому что код, который у меня есть, во многом такой же, как у вас, но он все еще не работает. 20.06.2017
  • Триггеры Blob поддерживаются в Python; для них просто нет шаблона. Я обновил ответ выше, чтобы показать, как создать его, начиная с триггера очереди. Если вы все еще хотите продолжить работу с C #, дайте мне знать, и мы сможем выяснить, что не так - этот код должен иметь возможность копировать-вставлять и запускать. 20.06.2017
  • Спасибо, это было очень полезно, и это действительно работает, единственная проблема, с которой я сейчас сталкиваюсь, заключается в том, что всякий раз, когда срабатывает триггер (то есть файл загружается в хранилище BLOB-объектов), функция работает со всеми файлами в этом контейнере. Знаете ли вы, каким образом я мог бы сделать так, чтобы функция работала только с одним загруженным двоичным объектом (тем, который запускал функцию)? 21.06.2017
  • При первом запуске приложение обработает все капли в контейнере. После этого он будет работать только с новыми BLOB-объектами или изменениями в существующих BLOB-объектах. Вы касаетесь каких-либо других капель в контейнере, когда добавляете новый? 21.06.2017
  • Да, я неосознанно делал это из моего скрипта python !, ошибка новичка, я думаю, большое спасибо, вы очень помогли, я также хотел знать, есть ли способ получить доступ к метаданным капли из кода функции . 21.06.2017
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..