[英]JOLT shift transformation: filter by the value of the property (not the name)
[英]Change output name after jolt transformation
我是 jolt 世界的新手,我想知道是否有好方法可以在轉換后修改 output 字段的名稱
輸入樣本:
{
"userId": "1",
"age": "20",
"firstName": "firstname1",
"lastname": "lastname1",
"zipCode": "zipcode1",
"street": "street1",
"city": "city1",
"country": "country",
"gender": "gender1",
"grade": "grade1",
"birthday": "birthday1"
}
Spec sample ==> 感謝@Barbaros 的幫助
[
{
"operation": "shift",
"spec": {
"userId": "ID",
"*": "&",
"street|city|zipCode|country": {
"$": "adr_&.code",
"@": "adr_&.value"
}
}
},
{
"operation": "shift",
"spec": {
"*": "&",
"adr_*": "address[]"
}
}
]
Output
{
"ID" : "1",
"age" : "20",
"firstName" : "firstname1",
"lastname" : "lastname1",
"address" : [ {
"code" : "zipCode",
"value" : "zipcode1"
}, {
"code" : "street",
"value" : "street1"
}, {
"code" : "city",
"value" : "city1"
}, {
"code" : "country",
"value" : "country"
} ],
"gender" : "gender1",
"grade" : "grade1",
"birthday" : "birthday1"
}
所需的 output 可能如下所示。 我的意思是地址中字段代碼的值,可以自定義(自定義字段):
{
"ID" : "1",
"age" : "20",
"firstName" : "firstname1",
"lastname" : "lastname1",
"address" : [ {
"code" : "**custom-field1**",
"value" : "zipcode1"
}, {
"code" : "**custom-field2**",
"value" : "street1"
}, {
"code" : "**custom-field3**",
"value" : "city1"
}, {
"code" : "**custom-field4**",
"value" : "country"
} ],
"gender" : "gender1",
"grade" : "grade1",
"birthday" : "birthday1"
}
提前致謝。
在這種情況下,通過在每個所需的自定義值前面加上#
通配符來單獨改寫屬於address
數組的每個屬性,因為它們沒有共同的因素,例如
[
{
"operation": "shift",
"spec": {
"userId": "ID",
"*": "&",
"zipCode": {
"#custom-field1": "adr_&1.code",
"@": "adr_&.value"
},
"street": {
"#custom-field2": "adr_&1.code",
"@": "adr_&.value"
},
"city": {
"#custom-field3": "adr_&1.code",
"@": "adr_&.value"
},
"country": {
"#custom-field4": "adr_&1.code",
"@": "adr_&.value"
}
}
},
{
"operation": "shift",
"spec": {
"*": "&",
"adr_*": "address[]"
}
}
]
您可以考慮另一個圖書館Josson 。
https://github.com/octomix/josson
反序列化
Josson josson = Josson.fromJsonString(
"{" +
" \"userId\": \"1\"," +
" \"age\": \"20\"," +
" \"firstName\": \"firstname1\"," +
" \"lastname\": \"lastname1\"," +
" \"zipCode\": \"zipcode1\"," +
" \"street\": \"street1\"," +
" \"city\": \"city1\"," +
" \"country\": \"country\"," +
" \"gender\": \"gender1\"," +
" \"grade\": \"grade1\"," +
" \"birthday\": \"birthday1\"" +
"}");
轉型
JsonNode node = josson.getNode(
"map(ID:userId, age, firstName, lastname," +
" address:collect(" +
" map(code:'custom-field1',value:zipCode)," +
" map(code:'custom-field2',value:street)," +
" map(code:'custom-field3',value:city)," +
" map(code:'custom-field4',value:country))," +
" gender, grade, birthday)");
System.out.println(node.toPrettyString());
Output
{
"ID" : "1",
"age" : "20",
"firstName" : "firstname1",
"lastname" : "lastname1",
"address" : [ {
"code" : "custom-field1",
"value" : "zipcode1"
}, {
"code" : "custom-field2",
"value" : "street1"
}, {
"code" : "custom-field3",
"value" : "city1"
}, {
"code" : "custom-field4",
"value" : "country"
} ],
"gender" : "gender1",
"grade" : "grade1",
"birthday" : "birthday1"
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.