3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

JsonとExcelを相互に変換するツールを作ってみた

Posted at

前置き

JsonとExcelを相互に変換するツールを作ってみました。

背景

普段の業務で、割と大き目かつ複雑なJsonファイルを、直接中身を分析したり手を入れたりする事があるのですが、生のJsonをいじるのって何かと大変ですよね?「これどこ?」みたいなことだったり、エディタで修正してフォーマットエラーになったり。

で、なんとかしたいなと、Excelとかに変換する方法はないか?とWeb検索してみるのですが、出てくるのは、Power Queryだったり、VBAで簡単なJsonを変換したり。ちょっと自分の求めているものはありませんでした。そこで、作ってみようと思い立ったわけです。

作ったもの

サクッとJson読み込ませてExcelに変換。変換したExcelは編集したあと、またJsonに変換し戻すことができます。

特徴

  • Jsonを再帰的に解釈し、Excelに変換します。
  • 多層構造の複雑なJsonは、階層ごとにExcelのシートに分けて変換します。
  • 変換したExcelは、編集した後、再度Jsonに変換できます。

※Excelは所定のフォーマットに従って変換されます。

画面イメージ

image.png

変換イメージ

入力Json

{
    "prop1" : {
        "prop1-1" : "value1-1",
        "prop1-2" : "value1-2",
        "prop1-3" : "value1-3"
    },
    "prop2" : [
        {
            "prop2-1" : "value2-1-1",
            "prop2-2" : "value2-2-1",
            "prop2-3" : [
                {
                    "prop2-3-1" : "value2-3-1",
                    "prop2-3-2" : "value2-3-2"
                },
                {
                    "prop2-3-1" : "value2-3-3",
                    "prop2-3-2" : "value2-3-4"
                }
            ]
        },
        {
            "prop2-1" : "value2-1-2",
            "prop2-2" : "value2-2-2",
            "prop2-3" : [
                {
                    "prop2-3-1" : "value2-3-5",
                    "prop2-3-2" : "value2-3-6"
                },
                {
                    "prop2-3-1" : "value2-3-7",
                    "prop2-3-2" : "value2-3-8"
                }

            ]
        }
    ],
    "prop3" : "valu3"
}

出力Excel

208299767-2ade4f70-4b2b-473f-beaf-00fead746c9b.png
同フォーマットであれば、再度Jsonに変換することが可能。

使い方とか

画面上段のDataGridにJsonをドラッグドロップして、実行ボタンをくりっくすることで変換されたExcelが出力されます。

詳しくはGitの[README]を参照してください。Excelへの変換方式などもまとめています。

技術的なこと

  • 言語 : C#
  • フレームワーク : .NET 6.0、WPF
  • 主な使用ライブラリ : ClosedXML、NewtonSoft.Json

工夫した/苦労した点

Jsonの階層ごとのタイプ判定

Jsonの多層構造をどのように解釈するのか、が今回のキモ。

課題を解決したのは、Newtonsoft.jsonのJTokenクラス。このクラスのプロパティに、JTokenTypeというのがありまして、このクラスにJsonをデシリアライズすると、今の階層のJsonのタイプを判定できます。階層ごとにタイプを判定→タイプごとの処理を実施、というのを再帰的に処理することで多層構造を解釈・処理することを実現しました。

Excelへの反映方式

Excelは、編集したあと再度Jsonに変換させる必要があります。そのためExcelからもJTokenTypeのように今の各シート(=階層)がどのタイプか、を判定する必要がありました。

ここは正直苦肉の策、といってもいいかもしれませんが、各シート(=階層)にその属性情報を記すため、A1セルに強制的にメモを登録、そこに「Object」「Array」と固定文字を指定することにしました。シートごとにA1セルのメモを判断、処理のタイプを判定することで、こちらも再帰的にJsonへ変換することを実現しました。(正直、もうちょっとうまいやりかたがなかったかと反省ポイント)
image.png
何かいいアイディアはないか・・

アプリ名

まぁ、この辺のセンスは皆無でして「JsonExcelConverter」みたいなのしようかと思ったんですが、そこはちょっとこだわってみようと、こちらのサイトでいろいろ検討しました。

で決めたのがこちら

JXler

どーなんでしょうか。。。

今後

Jsonを扱う技術はそこかしこにあるので、いろいろ応用ができそうな気はしています。今なんとなく考えていますのは、WebAPIを実行するツールとしてExcelを介してできないか、なんて考えています。が、いつになるかは未定。

GitHub Sponsors

僭越ながら、GitHub Sponsorsをつけてみました。チャリンチャリンいただけると大変うれしいです。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?