区切り文字 '/' で表現するXPath でdict:辞書を参照するものを作りました。
jsonpath-ng · PyPI ではありません。
XPath の書式で配列の何番目かの指定をするインデックス [n] を単独で区切る場合、、
/key/key/[0]
と書くのが正しいのか?
それとも
/key/key[0]
が正しいのか?、わからなくなってしまいましたが、後者を採用することにして、
以下、クラスの staticメソッドとして用意しました。
dicttools.py
# -*- coding: UTF-8 -*-
import re
class dictXpath():
@staticmethod
def get(dct, path):
p = path.replace('[', '/[') if re.match(r'^.+\[[0-9]+.+', path) else path
return dictXpath._get(dct, p)
@classmethod
def _get(self, _dct, _path):
pl = _path.strip('/').split('/')
if re.match(r'^\[[0-9]+\]$', pl[0]):
i = int(pl[0].strip('[').strip(']'))
if len(_dct) <= i: raise IndexError(pl)
return self._get(_dct[i], '/'.join(pl[1:])) if len(pl) > 1 else _dct[i]
d = _dct.get(pl[0])
return self._get(d, '/'.join(pl[1:])) if d is not None and len(pl) > 1 else dこれは、無理やり最初にリストの何番目かを示すインデックス [n] が path に
含まれたら区切り文字で区切っています。
使用方法は、予め用意した dict を 以下のように書きます
from dicttools import dictXpath type_scheme = dictXpath.get(foo, "/tokyo/scheme/type") first_group = dictXpath.get(foo, "/tokyo/scheme/group[0]")
jsonpath-ng より、機能は劣っています。