QGISでの複雑なJSON属性の操作


7

私は開発者であり、データチームがQGISアプリを使用して作業するためのgeojsonアセットを生成するツールを持っています。データの元のソースにより、これらの機能には、複雑な階層データとして表されるいくつかの属性があり、フラットスキーマに投影することはできません。

文字列リテラルの代わりに、JSON BLOBとして効果的に属性フィールドを表示/編集できる必要があります。

QGISでこれを行うにはどのような施設を利用できますか?そのような仕事をサポートするフィールド編集プラグインはありますか?理想的には、Visual Studio(コード)エディターの動作と同様に、ドキュメント形式の検証と折りたたみ可能なノードを備えたある種のポップアップJSONエディター。

または、このデータを外部ツールで管理し、ソース機能に再注入できるようにする他のワークフロー。

更新:Postgresを起動して、JSONを含む既存のテキスト列からJSON列を作成しました。QGISはそれを属性テーブルに隠します。DBでJSON属性を直接操作する際の推奨事項はありますか?


1
JSONをサポートするpostgresの
Mapperz

Postgresを見て、QGISエディターとどのように統合するかはわかりませんが、すべてを集中管理するのに理想的な状況です。
Tristan Rhodes

私もこれに興味がありますが、QGISでこれを容易にするものは見たことがありません。ちなみに、SQLiteはJSONもサポートしています。sqlite.org
arjan

問題となっているのはストレージではなく、エディターです。データエンジニアのチームが効果的にgeojsonファイルをクリーンアップし、私たちに渡します。私はこれをデータベースで支えられたらうれしいですが、これを使用するには、エディターの豊富なサポートが必要です。Pythonを学びプラグインを作成するだけかもしれません:)
Tristan Rhodes

@TristanRhodesプラグインを作成した場合(または別の解決策を見つけた場合)、お知らせください。
アルジャン

回答:



2

最近のQGISバージョン(> 3.3)では、PostgreSQLデータベースにJSONフィールドがある場合map_get、式ダイアログの任意の場所で関数を使用して、特定の値を抽出できます。

たとえば、JSONフィールドが呼び出され"extraData"、その内容が次の場合:

{ 
        "param1": "Some string",
        "param2": "Another string"
}

その後、 map_get(extraData,'param1')生成されますSome string

(私は試していませんが)関数を再帰的に使用して深くネストされた値を取得できると思います。

from_jsonコンテンツ全体を返す関数など、他の関数もあります。Expression Dialog内のMapsセクションを見てください。


1

次のコンテンツ/値(文字列ですがjson構造体を含む)を含む' location ' というフィールド/ 列がQGISにあるとします。

{
    "address": "A-319, Hornos, Jaén, Andalusia, 23292, Spain",
    "continent": "Europe",
    "country": "Spain",
    "region": "Andalucía",
    "subregion": "Jaén"
}

そして 'subregion'プロパティにアクセスしたいので、次の式:

map_get(json_to_map("location"),'subregion')

「Jaén」を返します

geopackageデータベースでテストされています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.