仕様
ルート
ルートハッシュは
$
キー
{
"key1": "value"
}
は
$.key1
サブキー
{
"key1": "value",
"key2": {
"key3": "value"
}
}
は
$.key1
$.key2.key3
配列
{
"key1": "value",
"key2": {
"key3": "value"
},
"key4": [
"value",
"value"
],
"key5": [
{
"key6": "value"
},
{
"key6": "value"
}
]
}
は
$.key1
$.key2.key3
$.key4[]
$.key5[].key6
スクリプト
import json
import sys
def list_keys(json_obj, prefix='$'):
keys = []
if isinstance(json_obj, dict):
for key, value in json_obj.items():
new_prefix = f"{prefix}.{key}"
keys.extend(list_keys(value, new_prefix))
elif isinstance(json_obj, list):
new_prefix = f"{prefix}[]"
if json_obj:
for item in json_obj:
keys.extend(list_keys(item, new_prefix))
else:
keys.append(new_prefix)
else:
keys.append(prefix)
return keys
# 標準入力からJSONデータを読み込む
input_data = sys.stdin.read()
try:
json_obj = json.loads(input_data)
keys_list = list_keys(json_obj)
for key in keys_list:
print(key)
except json.JSONDecodeError:
print("入力が有効なJSONではありません。")