I have a list of below object(showing only one object in an array for example). How to do I split users list into different objects with same original object in JAVA. I have give the result am getting from db and result am expecting after processing in java.
As you can see in the result am expecting in the attached JSON(2nd JSON), the objects all remain the same except the users array list in each object. We have to split the array in terms of "parent_user_id"
in all the objects in users array, so common objects with same "parent_user_id"
will be in one object as a whole.
Result am getting from DB:
[
{
"_id" : "63a8808652f40e1d48a3d1d7",
"name" : "A",
"description" : null,
"users" : [
{
"id" : "63a8808c52f40e1d48a3d1da",
"owner" : "John Doe",
"purchase_date" : "2022-12-25",
"status" : "active",
"parent_user_id" : "63a8808c52f40e1d48a3d1da"
},
{
"id" : "63a880a552f40e1d48a3d1dc",
"owner" : "John Doe 1",
"purchase_date" : "2022-12-25",
"parent_user_id" : "63a8808c52f40e1d48a3d1da"
},
{
"id" : "63a880f752f40e1d48assddd"
"owner" : "John Doe 2",
"purchase_date" : "2022-12-25",
"parent_user_id" : "63a8808c52f40e1d48a3d1da"
},
{
"id" : "63a880f752f40e1d48a3d207"
"owner" : "John Doe 11",
"dt" : "2022-12-25",
"status" : "inactive",
"parent_user_id" : "63a880f752f40e1d48a3d207"
},
{
"id" : "63a880f752f40e1d48agfmmb"
"owner" : "John Doe 112",
"dt" : "2022-12-25",
"status" : "active",
"parent_user_id" : "63a880f752f40e1d48agfmmb"
}
{
"id" : "63a880f752f40e1d48agggg"
"owner" : "John SS",
"dt" : "2022-12-25",
"status" : "inactive",
"parent_user_id" : "63a880f752f40e1d48agggg"
}
{
"id" : "63a880f752f40e1d487777"
"owner" : "John SS",
"dt" : "2022-12-25",
"parent_user_id" : "63a880f752f40e1d48agggg"
}
]
}
]
Result I need in java
[
{
"_id": "63a8808652f40e1d48a3d1d7",
"name": "A",
"description": null,
"users": [
{
"id": "63a8808c52f40e1d48a3d1da",
"owner": "John Doe",
"purchase_date": "2022-12-25",
"status": "active",
"parent_user_id": "63a8808c52f40e1d48a3d1da"
},
{
"id": "63a880a552f40e1d48a3d1dc",
"owner": "John Doe 1",
"purchase_date": "2022-12-25",
"parent_user_id": "63a8808c52f40e1d48a3d1da"
},
{
"id": "63a880f752f40e1d48assddd",
"owner": "John Doe 2",
"purchase_date": "2022-12-25",
"parent_user_id": "63a8808c52f40e1d48a3d1da"
}
]
},
{
"_id": "63a8808652f40e1d48a3d1d7",
"name": "A",
"description": null,
"users": [
{
"id": "63a880f752f40e1d48a3d207",
"owner": "John Doe 11",
"dt": "2022-12-25",
"status": "inactive",
"parent_user_id": "63a880f752f40e1d48a3d207"
}
]
},
{
"_id": "63a8808652f40e1d48a3d1d7",
"name": "A",
"description": null,
"users": [
{
"id": "63a880f752f40e1d48agfmmb",
"owner": "John Doe 112",
"dt": "2022-12-25",
"status": "active",
"parent_user_id": "63a880f752f40e1d48agfmmb"
}
]
},
{
"_id": "63a8808652f40e1d48a3d1d7",
"name": "A",
"description": null,
"users": [
{
"id": "63a880f752f40e1d48agggg",
"owner": "John SS",
"dt": "2022-12-25",
"status": "inactive",
"parent_user_id": "63a880f752f40e1d48agggg"
},
{
"id": "63a880f752f40e1d487777",
"owner": "John SS",
"dt": "2022-12-25",
"parent_user_id": "63a880f752f40e1d48agggg"
}
]
}
]
CodePudding user response:
You can use JSON library such as Josson to do the transformation.
https://github.com/octomix/josson
Deserialization
Josson josson = Josson.fromJsonString(
"["
" {"
" \"_id\": \"63a8808652f40e1d48a3d1d7\","
" \"name\": \"A\","
" \"description\": null,"
" \"users\": ["
" {"
" \"id\": \"63a8808c52f40e1d48a3d1da\","
" \"owner\": \"John Doe\","
" \"purchase_date\": \"2022-12-25\","
" \"status\": \"active\","
" \"parent_user_id\": \"63a8808c52f40e1d48a3d1da\""
" },"
" {"
" \"id\": \"63a880a552f40e1d48a3d1dc\","
" \"owner\": \"John Doe 1\","
" \"purchase_date\": \"2022-12-25\","
" \"parent_user_id\": \"63a8808c52f40e1d48a3d1da\""
" },"
" {"
" \"id\": \"63a880f752f40e1d48assddd\","
" \"owner\": \"John Doe 2\","
" \"purchase_date\": \"2022-12-25\","
" \"parent_user_id\": \"63a8808c52f40e1d48a3d1da\""
" },"
" {"
" \"id\": \"63a880f752f40e1d48a3d207\","
" \"owner\": \"John Doe 11\","
" \"dt\": \"2022-12-25\","
" \"status\": \"inactive\","
" \"parent_user_id\": \"63a880f752f40e1d48a3d207\""
" },"
" {"
" \"id\": \"63a880f752f40e1d48agfmmb\","
" \"owner\": \"John Doe 112\","
" \"dt\": \"2022-12-25\","
" \"status\": \"active\","
" \"parent_user_id\": \"63a880f752f40e1d48agfmmb\""
" },"
" {"
" \"id\": \"63a880f752f40e1d48agggg\","
" \"owner\": \"John SS\","
" \"dt\": \"2022-12-25\","
" \"status\": \"inactive\","
" \"parent_user_id\": \"63a880f752f40e1d48agggg\""
" },"
" {"
" \"id\": \"63a880f752f40e1d487777\","
" \"owner\": \"John SS\","
" \"dt\": \"2022-12-25\","
" \"parent_user_id\": \"63a880f752f40e1d48agggg\""
" }"
" ]"
" },"
" {"
" \"_id\": \"111111111111111111111111\","
" \"name\": \"B\","
" \"users\": ["
" {"
" \"id\": \"22222222222222222222222\","
" \"owner\": \"John XX\","
" \"purchase_date\": \"2022-12-25\","
" \"status\": \"active\","
" \"parent_user_id\": \"22222222222222222222222\""
" }"
" ]"
" }"
"]");
Transformation
JsonNode node = josson.getNode(
"[]@" // 1
".users" // 2
".group(parent_user_id)" // 3
".map(..._id, ...name, ...description, users:elements)" // 4
".@flatten()"); // 5
System.out.println(node.toPrettyString());
- Divert each element to separate branches
- Proceed to node
users
- Group by
parent_user_id
- Map a new object, get
_id/name/description
from 2 steps back, and renameelements
tousers
- Merge all branch results into a single array and then flatten the array
Output
[ {
"_id" : "63a8808652f40e1d48a3d1d7",
"name" : "A",
"description" : null,
"users" : [ {
"id" : "63a8808c52f40e1d48a3d1da",
"owner" : "John Doe",
"purchase_date" : "2022-12-25",
"status" : "active",
"parent_user_id" : "63a8808c52f40e1d48a3d1da"
}, {
"id" : "63a880a552f40e1d48a3d1dc",
"owner" : "John Doe 1",
"purchase_date" : "2022-12-25",
"parent_user_id" : "63a8808c52f40e1d48a3d1da"
}, {
"id" : "63a880f752f40e1d48assddd",
"owner" : "John Doe 2",
"purchase_date" : "2022-12-25",
"parent_user_id" : "63a8808c52f40e1d48a3d1da"
} ]
}, {
"_id" : "63a8808652f40e1d48a3d1d7",
"name" : "A",
"description" : null,
"users" : [ {
"id" : "63a880f752f40e1d48a3d207",
"owner" : "John Doe 11",
"dt" : "2022-12-25",
"status" : "inactive",
"parent_user_id" : "63a880f752f40e1d48a3d207"
} ]
}, {
"_id" : "63a8808652f40e1d48a3d1d7",
"name" : "A",
"description" : null,
"users" : [ {
"id" : "63a880f752f40e1d48agfmmb",
"owner" : "John Doe 112",
"dt" : "2022-12-25",
"status" : "active",
"parent_user_id" : "63a880f752f40e1d48agfmmb"
} ]
}, {
"_id" : "63a8808652f40e1d48a3d1d7",
"name" : "A",
"description" : null,
"users" : [ {
"id" : "63a880f752f40e1d48agggg",
"owner" : "John SS",
"dt" : "2022-12-25",
"status" : "inactive",
"parent_user_id" : "63a880f752f40e1d48agggg"
}, {
"id" : "63a880f752f40e1d487777",
"owner" : "John SS",
"dt" : "2022-12-25",
"parent_user_id" : "63a880f752f40e1d48agggg"
} ]
}, {
"_id" : "111111111111111111111111",
"name" : "B",
"users" : [ {
"id" : "22222222222222222222222",
"owner" : "John XX",
"purchase_date" : "2022-12-25",
"status" : "active",
"parent_user_id" : "22222222222222222222222"
} ]
} ]