2017-02-07 15 views
0

JSONデータからコード生成を行っています。私はいくつかのAWSバックアップデータをJSONファイルに入れています。私は最初のレコードを取得し、その1行からjsonスキーマを生成します。PowershellのJSONスキーマをトラバースする

Powershellでスキーマを読み込むと、「プロパティ」内の配列ではなく、プライマリプロパティとしてデシリアライズされるため、プロパティを列挙できません。これはjsonスキーマのように見えますが、プロパティのリストは配列ではなくオブジェクトリストとして表示されますが、わかりません。

私はPowerShell JSONパーサーがそこに配列を見ることができないと推測しているので、それらのプロパティを作成します。

実際にスキーマJSONを手動でトラバースして、プロパティとそのタイプのリストを取得したくありません。

schema.json

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "description": "", 
    "type": "object", 
    "properties": { 
    "definition": { 
     "type": "object", 
     "properties": { 
     "s": { 
      "type": "string", 
      "minLength": 1 
     } 
     }, 
     "required": [ 
     "s" 
     ] 
    }, 
    "calcDefFilters": { 
     "type": "object", 
     "properties": { 
     "l": { 
      "type": "array", 
      "uniqueItems": true, 
      "minItems": 1, 
      "items": { 
      "required": [], 
      "properties": { 
       "m": { 
       "type": "object", 
       "properties": { 
        "field": { 
        "type": "object", 
        "properties": { 
         "s": { 
         "type": "string", 
         "minLength": 1 
         } 
        }, 
        "required": [ 
         "s" 
        ] 
        }, 
        "value": { 
        "type": "object", 
        "properties": { 
         "s": { 
         "type": "string", 
         "minLength": 1 
         } 
        }, 
        "required": [ 
         "s" 
        ] 
        }, 
        "operator": { 
        "type": "object", 
        "properties": { 
         "s": { 
         "type": "string", 
         "minLength": 1 
         } 
        }, 
        "required": [ 
         "s" 
        ] 
        } 
       }, 
       "required": [ 
        "field", 
        "value", 
        "operator" 
       ] 
       } 
      } 
      } 
     } 
     }, 
     "required": [ 
     "l" 
     ] 
    }, 
    "calculationId": { 
     "type": "object", 
     "properties": { 
     "s": { 
      "type": "string", 
      "minLength": 1 
     } 
     }, 
     "required": [ 
     "s" 
     ] 
    }, 
    "calcDefParameters": { 
     "type": "object", 
     "properties": { 
     "l": { 
      "type": "array", 
      "uniqueItems": true, 
      "minItems": 1, 
      "items": { 
      "required": [], 
      "properties": { 
       "m": { 
       "type": "object", 
       "properties": { 
        "name": { 
        "type": "object", 
        "properties": { 
         "s": { 
         "type": "string", 
         "minLength": 1 
         } 
        }, 
        "required": [ 
         "s" 
        ] 
        }, 
        "value": { 
        "type": "object", 
        "properties": { 
         "n": { 
         "type": "string", 
         "minLength": 1 
         } 
        }, 
        "required": [ 
         "n" 
        ] 
        }, 
        "type": { 
        "type": "object", 
        "properties": { 
         "s": { 
         "type": "string", 
         "minLength": 1 
         } 
        }, 
        "required": [ 
         "s" 
        ] 
        } 
       }, 
       "required": [ 
        "name", 
        "value", 
        "type" 
       ] 
       } 
      } 
      } 
     } 
     }, 
     "required": [ 
     "l" 
     ] 
    }, 
    "runId": { 
     "type": "object", 
     "properties": { 
     "s": { 
      "type": "string", 
      "minLength": 1 
     } 
     }, 
     "required": [ 
     "s" 
     ] 
    }, 
    "type": { 
     "type": "object", 
     "properties": { 
     "s": { 
      "type": "string", 
      "minLength": 1 
     } 
     }, 
     "required": [ 
     "s" 
     ] 
    }, 
    "externalId": { 
     "type": "object", 
     "properties": { 
     "s": { 
      "type": "string", 
      "minLength": 1 
     } 
     }, 
     "required": [ 
     "s" 
     ] 
    }, 
    "dealVersionId": { 
     "type": "object", 
     "properties": { 
     "s": { 
      "type": "string", 
      "minLength": 1 
     } 
     }, 
     "required": [ 
     "s" 
     ] 
    } 
    }, 
    "required": [ 
    "definition", 
    "calcDefFilters", 
    "calculationId", 
    "calcDefParameters", 
    "runId", 
    "type", 
    "externalId", 
    "dealVersionId" 
    ] 
} 

これは私がPowerShellで得るものです:

[DBG]: PS C:\Scripts>> $prop 


definition  : @{type=object; properties=; required=System.Object[]} 
calcDefFilters : @{type=object; properties=; required=System.Object[]} 
calculationId  : @{type=object; properties=; required=System.Object[]} 
calcDefParameters : @{type=object; properties=; required=System.Object[]} 
runId    : @{type=object; properties=; required=System.Object[]} 
type    : @{type=object; properties=; required=System.Object[]} 
externalId  : @{type=object; properties=; required=System.Object[]} 
dealVersionId  : @{type=object; properties=; required=System.Object[]} 

思考?

+0

えっ、 'properties'は、そのための配列、JSONの文法は'プロパティになります* *ではありません。[...] 'ありません'properties:{...}' –

+0

右。そのため、JSONスキーマは配列内のプロパティを実行しません。私は運が尽きていますか? –

+0

[カスタムオブジェクトの各NotePropertyをループする](// stackoverflow.com/q/27642169) – wOxxOm

答えて

0

ない、それは答えることを確認しかし、あなたはこのようにそれを行うことができます。

$a = @" 
{ 
    "`$schema": "http://json-schema.org/draft-04/schema#", 
    "description": "", 
    "type": "object", 
    "properties": { 
    "definition": { 
     "type": "object", 
     "properties": { 
     "s": { 
      "type": "string", 
      "minLength": 1 
     } 
     }, 
     "required": [ 
     "s" 
     ] 
    }, 
    "calcDefFilters": { 
     "type": "object", 
     "properties": { 
     "l": { 
      "type": "array", 
      "uniqueItems": true, 
      "minItems": 1, 
      "items": { 
      "required": [], 
      "properties": { 
       "m": { 
       "type": "object", 
       "properties": { 
        "field": { 
        "type": "object", 
        "properties": { 
         "s": { 
         "type": "string", 
         "minLength": 1 
         } 
        }, 
        "required": [ 
         "s" 
        ] 
        }, 
        "value": { 
        "type": "object", 
        "properties": { 
         "s": { 
         "type": "string", 
         "minLength": 1 
         } 
        }, 
        "required": [ 
         "s" 
        ] 
        }, 
        "operator": { 
        "type": "object", 
        "properties": { 
         "s": { 
         "type": "string", 
         "minLength": 1 
         } 
        }, 
        "required": [ 
         "s" 
        ] 
        } 
       }, 
       "required": [ 
        "field", 
        "value", 
        "operator" 
       ] 
       } 
      } 
      } 
     } 
     }, 
     "required": [ 
     "l" 
     ] 
    }, 
    "calculationId": { 
     "type": "object", 
     "properties": { 
     "s": { 
      "type": "string", 
      "minLength": 1 
     } 
     }, 
     "required": [ 
     "s" 
     ] 
    }, 
    "calcDefParameters": { 
     "type": "object", 
     "properties": { 
     "l": { 
      "type": "array", 
      "uniqueItems": true, 
      "minItems": 1, 
      "items": { 
      "required": [], 
      "properties": { 
       "m": { 
       "type": "object", 
       "properties": { 
        "name": { 
        "type": "object", 
        "properties": { 
         "s": { 
         "type": "string", 
         "minLength": 1 
         } 
        }, 
        "required": [ 
         "s" 
        ] 
        }, 
        "value": { 
        "type": "object", 
        "properties": { 
         "n": { 
         "type": "string", 
         "minLength": 1 
         } 
        }, 
        "required": [ 
         "n" 
        ] 
        }, 
        "type": { 
        "type": "object", 
        "properties": { 
         "s": { 
         "type": "string", 
         "minLength": 1 
         } 
        }, 
        "required": [ 
         "s" 
        ] 
        } 
       }, 
       "required": [ 
        "name", 
        "value", 
        "type" 
       ] 
       } 
      } 
      } 
     } 
     }, 
     "required": [ 
     "l" 
     ] 
    }, 
    "runId": { 
     "type": "object", 
     "properties": { 
     "s": { 
      "type": "string", 
      "minLength": 1 
     } 
     }, 
     "required": [ 
     "s" 
     ] 
    }, 
    "type": { 
     "type": "object", 
     "properties": { 
     "s": { 
      "type": "string", 
      "minLength": 1 
     } 
     }, 
     "required": [ 
     "s" 
     ] 
    }, 
    "externalId": { 
     "type": "object", 
     "properties": { 
     "s": { 
      "type": "string", 
      "minLength": 1 
     } 
     }, 
     "required": [ 
     "s" 
     ] 
    }, 
    "dealVersionId": { 
     "type": "object", 
     "properties": { 
     "s": { 
      "type": "string", 
      "minLength": 1 
     } 
     }, 
     "required": [ 
     "s" 
     ] 
    } 
    }, 
    "required": [ 
    "definition", 
    "calcDefFilters", 
    "calculationId", 
    "calcDefParameters", 
    "runId", 
    "type", 
    "externalId", 
    "dealVersionId" 
    ] 
} 
"@ 

$b = $a | ConvertFrom-Json 
$properties = $b.properties.Psobject.Members | where {$_.MemberType -eq 'NoteProperty'} | % {$_.Name} 
+0

それはトップレベルになりますが、次のレベルダウンプロパティにはなりません。 –

+0

再帰的に実行できます。 – JPBlanc

関連する問題