ネストされたフィールドを持つJSONがあります:
[
{
"Platform Parent Dato Id": "23768",
"Platform Dato Id": "24138",
"Platform Dato Name": "Random Europe",
"Platform mission Id": "111112",
"Platform submission Id": "638687",
"Platform submission Flight Id": "863524",
"Start Date": "2017-12-01",
"End Date": "2017-12-02",
"Platform Compensation": 109.0909,
"Total Value": 909.0909,
"Goal": "200000.0000",
"Value Information": {
"Platform Compensation": [
{
"Platform mission Id": "111112",
"Platform submission Id": "638687",
"Platform submission Flight Id": "863524",
"Value Rate": "14.0000",
"Value": 109.0909
}
]
}
},
{
"Platform Parent Dato Id": "23768",
"Platform Dato Id": "24138",
"Platform Dato Name": "Random Europe",
"Platform mission Id": "111113",
"Platform submission Id": "638687",
"Platform submission Flight Id": "863524",
"Start Date": "2017-12-01",
"End Date": "2017-12-02",
"Platform Compensation": 109.0909,
"Total Value": 909.0909,
"Goal": "200000.0000",
"Value Information": {
"Platform Compensation": [
{
"Platform mission Id": "111113",
"Platform submission Id": "638687",
"Platform submission Flight Id": "863524",
"Value Rate": "12.0000",
"Value": 109.0909
}
]
}
}
]
Value Rate
ネストからValue Information
を取得するためにJSONPATHを使用しています。
このWebサイトにJSONテキストを貼り付けました: http://jsonpath.com/ そしてこの行を使用した後:
$[*].['Platform Compensation'].['Value Rate']
私はこれを取得しています:
そしてこの行を使用した後:
$.['Value Information'].['Platform Compensation'].['Platform mission Id']
私はこれを取得しています:
私が返そうとしているもの(出力)は次のとおりです。
しかし、これら2つを1行に組み合わせて、1つのJSONPATHクエリで両方を返すための正しい構文が見つかりません。
jsonpath
を使用して、特定の式のvaluesを選択でき、一部の実装では、カスタマイズされた述語の値を選択できますが、射影はサポートされていません。
jsonpath
を使用して、指定されたJSONをフィルタリングできます。例えば:
すべてのPlatform Compensation
値を含む配列を返します。
$.['Value Information'].['Platform Compensation'].['Platform mission Id']
すべてのPlatform mission Id
値を含む配列を返します。
$.['Value Information'].['Platform Compensation']
ただし、jsonpath
を使用してキーと値のサブセットを読み取ることはできません。キーと値のサブセットを読み取るには、JSON逆シリアル化ライブラリを使用する必要があります。 Javaの世界で)一般的に使用されるライブラリは、 Jackson や Gson などです。
ジャクソンを使用した例を次に示します。
String json = "...";
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> asMap = mapper.readValue(json, Map.class);
Map<String, Object> transformed = new HashMap<>();
transformed.put("Platform mission Id", asMap.get("Platform mission Id"));
transformed.put("Value Rate", asMap.get("Value Rate"));
String result = mapper.writeValueAsString(transformed);
Jayway 実装によりそれが可能になります。 jsonpathは$.[*]['Value Information']['Platform Compensation'][*]['Platform mission Id', 'Value Rate']
このウェブサイトで試すことができます http://jsonpath.herokuapp.com/