Help us understand the problem. What is going on with this article?

初めてのAzureFunctions作成してみた (JSON Arrayのソート)

はじめに

個人の記録的な投稿であることをご容赦ください。
Power Automateを利用していると、配列のソート操作がないことにしばしば悩まされます。
簡易的なソートであればPower Automateの枠内で対応できますが、ちゃんとした(?)ソートではないので、制限が多いです。
そんなちょっとした不満を解消する手段として、Azure Functionsを使ってみたので、その記録です。

つくる/つくった

参考にしたのは公式のHello worldです。
(Ref. https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-first-azure-function )
得意な言語というのも特にないので、javascriptで始めました。

今回作るものは、
1. JSONの配列、プロパティ名を入力として
2. 対象のプロパティでソートされた配列を返す
というだけのシンプルなものです。
なお、ちょっとした都合により、JSON配列はURLにパラメータとして含めることで受け渡しています。
普通にやるならリクエストのBodyに入れるんでしょう。

想定するのは以下のようなGETのリクエストです。

https://abcdefg.azurewebsites.net/api/HttpExample?src=<JSON配列のURL encodeした値>&prop=<ソートしたいプロパティ>

できたFunctionsはindex.jsを少しだけHello Worldから変更しただけのものです。

index.js
module.exports = async function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    function sortByProperty(property) {
        return function (a, b) {
            if (a[property] > b[property])
                return 1;
            else if (a[property] < b[property])
                return -1;

            return 0;
        }
    }

    if (req.query.src && req.query.prop) {
        context.res = {
            // status: 200, /* Defaults to 200 */
            body: JSON.parse(decodeURI(req.query.src)).sort(sortByProperty(req.query.prop)),
            headers: {
                'Content-Type': 'application/json'
            }
        };
    }
    else {
        context.res = {
            status: 400,
            body: "Please pass a name on the query string or in the request body"
        };
    }
};

sortByPropertyでリクエストのパラメータにあるpropを参照します。ソートする対象は、エンコードされているので、まずdecodeURIで文字列に戻して、さらにJSONとして扱うためにJSON.parseしました。

おわり, 動かした結果

unsorted がもとの入力になります。(画像右側)
これを、HTTPアクション (Azure Functionsよびだし) を通すことで、"name"でソートされた結果を得ることができました。
image.png

このような感じで、サービスに備わっていない機能を少しだけ、とても簡単なコードで補完できるのはとても良いですね。
次はバインディングを利用して、OneDriveやSharePointに保存されたファイルへのアクセスを試してみたいと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした